2016-09-30 58 views
1

我有一個數據集,其座標可以重複多次。 我想使一個hexbinplot顯示該bin中重複座標的最大次數。我使用R,我寧願使用ggplot,因此圖形與同一報告中的其他圖形一致。顯示ggplot2中每個bin的最大頻率點stat_binhex

最低工作示例(垃圾箱顯示計數不是最大):

library(ggplot2) 
library(data.table) 
set.seed(41) 
dat<-data.table(x=sample(seq(-10,10,1),1000,replace=TRUE), 
      y=sample(seq(-10,10,1),1000,replace=TRUE)) 
dat[,.N,by=c("x","y")][,max(N)] 
# No bin should be over 9 

p1 <- ggplot(dat,aes(x=x,y=y))+stat_binhex(bins=10) 
p1 

我認爲這種方法應該與此有關的問題: calculating percentages for bins in ggplot2 stat_binhex但我不知道如何使它適應我的情況。 此外,我很關心這個問題ggplot2: ..count.. not working with stat_bin_hex anymore,因爲它可以使我的目標比我最初的想法更難。

是否有可能使垃圾箱顯示一個點重複的最大次數?

+0

你能澄清你的意思是「座標重複的最大次數」嗎?我很努力地理解計數和「座標重複次數」之間的區別,並且不知道在這種情況下如何處理「最大」。 –

+0

假設點(0,0)和(0,1)位於同一個容器中,並且它們是該容器中的唯一點。 (0,0)出現5次,(0,1)出現3次。在這種情況下,圖表會顯示8,因爲它使用的函數是計數(5 + 3)。我想使用的是最大功能,因此顯示5(最大(5,3))。 –

+0

感謝@JonNagra的澄清。我已經猜到了,併發布了一些東西,就像你回答。我現在看到*你正在嘗試做什麼,但是我真的爲* why而苦惱 - 這是一個適當的行爲,可能有助於闡明一個不同的解決方案(我很難理解如何僅顯示最大值有助於在丟失大量信息時顯示數據,並從查看器中隱藏該信息)。或者,下面我發佈了一個選項來分別顯示所有的座標。 –

回答

1

我想,在玩了一些數據之後,我現在明白了。圖中的每個箱表示多個點,例如(9,9);(9,10)(10,9);(10,10)全部在圖中的單個箱中。我必須警告,這是預期的行爲。我不清楚爲什麼你不想這樣做。相反,您似乎只想顯示其中一個點的值(例如9,9)。

我不認爲您可以直接在geom_hexstat_hexbin的電話中執行此操作,因爲這些功能都試圖忠實地表示所有數據。事實上,他們並不一定需要像你一樣的離散座標 - 他們在連續數據上工作得很好。

爲了您的目的,如果您想要更好的控制,您可能需要改爲使用geom_tile並自己計算值,例如。 (使用dplyrmagrittr):

countedData <- 
    dat %$% 
    table(x,y) %>% 
    as.data.frame() 

ggplot(countedData 
     , aes(x = x 
      , y = y 
      , fill = Freq)) + 
    geom_tile() 

enter image description here

,你可能會表示一點從那裏玩,但它至少會顯示每個獨立的座標越緊。

或者,您可以過濾您的原始數據,以僅包含之間的最大值。這將需要你匹配binning,但至少可以作爲一個選項。

爲了完整起見,以下是如何修改@Jon Nagra(OP)linked tostat_summary_hex解決方案。請注意,還有一些額外的步驟,所以我不認爲這是相當重複的。具體而言,上述表格步驟需要生成一些可用作總結的z,然後您需要將x和y從因子轉換回原始比例。

ggplot(countedData 
     , aes(x = as.numeric(as.character(x)) 
      , y = as.numeric(as.character(y)) 
      , z = Freq)) + 
    stat_summary_hex(fun = max, bins = 10 
        , col = "white") 

enter image description here

值得注意的是,我仍然認爲,geom_tile可能更有用,即使它是不是很華麗。

+0

我在看hexbin庫,發現這個帖子完全是我需要的:http://stackoverflow.com/questions/17284615/plotting-a-hex-bin-in-r-and-ggplot2-using-a -continuous-z-fill-variable 我可以將變量按x和y分組,並使用max而不是sum。我不知道我是否應該將我的問題標記爲重複。 –

+0

我剛剛更新了答案,以合併您鏈接的解決方案。我不認爲這個問題是相當重複的,因爲它是從不同的數據格式開始的。 –

+0

謝謝!我不知道如何在這種情況下進行。 –