2011-08-02 83 views
15

在g的ggplot2數據可視化包中的geom_tile()圖層中,當單元格不包含數據時,它不會繪製。例如。 http://docs.ggplot2.org/current/geom_tile.html並搜索「缺失值」。ggplot2使geom_tile中的缺失值不爲空

我想改變這種行爲來顯示所有瓷磚的最小值。這是可能的,如果是這樣的話?

其他方面:當我使用

stat_density2d(aes(x=x,y=y, fill=..density..), geom="tile", contour=FALSE) 

我想沒有密度區域看起來非常相似的地區用很少的密度。就像現在一樣,如果說色譜是從藍色到紅色,背景是白色的,那麼當瓷磚中沒有數據時,它是白色的,並且在瓷磚中存在單個數據點時,就是藍色。

向數據添加僞計數似乎是可能的,但我怎麼事先知道如何分配僞計數?並在有刻面的情況下?

+0

我不完全知道你在找什麼(重複的例子,將有很大的幫助),但也許你可以試試'+ scale_fill_gradient(limits = c(0,...))'並用適當的最大值替換'...'? – joran

回答

6

這個問題也可以通過一個選項固定在scale_fill_continuous

scale_fill_continuous(na.value = 'salmon') 
23

如果您的數據是網格狀數據,那麼如何通過subset()爲NA添加另一個geom_tile()

# Generate data 
pp <- function (n, r = 4) { 
    x <- seq(-r*pi, r*pi, len = n) 
    df <- expand.grid(x = x, y = x) 
    df$r <- sqrt(df$x^2 + df$y^2) 
    df$z <- cos(df$r^2)*exp(-df$r/6) 
    df 
} 
pp20 <- pp(20)[sample(20*20, size = 200),] 

df_grid <- expand.grid(x = unique(pp20$x), y = unique(pp20$x)) 
df_merge <- merge(pp20, df_grid, by = c("x", "y"), all = TRUE) 

# Missing values 
ggplot(df_merge, aes(x = x, y = y)) + 
    geom_tile(data = subset(df_merge, !is.na(z)), aes(fill = z)) + 
    geom_tile(data = subset(df_merge, is.na(z)), aes(colour = NA), 
    linetype = 0, fill = "pink", alpha = 0.5) 

an example

+0

這似乎是一個合理的方法。謝謝! – momeara

+2

我試了一下代碼,但是NA的圖例沒有顯示出來...... ggplot2的作者在這篇文章中提到了這個:https://groups.google.com/forum/#!topic/ggplot2/MbYp5K03X3w你有沒有得到NA傳說? – olala

4

這個答案也許有點太「可愛」,但可能的一個解決方案是簡單地改變你的情節在你的規模最小顏色的背景顏色?例如:

+ opts(plot.background = theme_rect(colour = "blue") 

如果你的圖有更復雜的結構,這最終使在區域背景藍色,你不希望這樣的事情發生,你可以繪製geom_rect層:第一,通過延伸到只有您的數據範圍。

+0

這些是聰明的想法和好記的技巧。謝謝! – momeara

4

對於後人,這裏是兼容的解決方案與ggplot2版本1.9.3

+ theme(panel.background=element_rect(fill="blue", colour="blue") 
  • 在joran的回答,plot.background是整個情節包括標題和圖例等panel.background是數據出現的區域。

  • 在GGPLOT2的最新版本,opts已被替換themetheme_rect已被替換element_rect

  • 指定element_rect,color是矩形的邊界,而fill是矩形的內部。

我原本使用,

+ geom_rect(aes(xmin=-Inf, xmax=Inf, ymin=-Inf, ymax=Inf), fill="blue") 

但在後臺添加時geom_raster而不是geom_tile併產生pdf輸出,PDF瀏覽器有一個非常困難的實時渲染的情節,使用實質上更多的CPU週期和記憶。