Rのggplot2データ視覚化パッケージのgeom_tile()
レイヤーで、セルにデータが含まれていない場合、セルは描画されません。例えば。 http://docs.ggplot2.org/current/geom_tile.html そして「不足している値」を検索します。
この動作を変更して、すべてのタイルの最小値を表示したいと思います。これは可能ですか?もしそうなら、どのように?
追加のコンテキスト:使用する場合
stat_density2d(aes(x=x,y=y, fill=..density..), geom="tile", contour=FALSE)
密度のない領域は、密度の低い領域と非常によく似ているように見せたいです。現在のように、カラースペクトルが青から赤で、背景が白の場合、タイルにデータがない場合は白になり、タイルにデータポイントが1つある場合は青になります。
データに疑似カウントを追加することは可能のようですが、疑似カウントを分散する方法を事前に知るにはどうすればよいですか?ファセットがある場合は?
この問題は、scale_fill_continuousのオプションでも修正できます。
scale_fill_continuous(na.value = 'salmon')
以下を編集してください:
これは、明示的に(つまり、NAである値)欠落している値のみを埋めます。 (以前のバージョンのggplotでは動作が異なっていた可能性があります。怠惰すぎて確認できません)
例については、次のコードを参照してください。
library(tidyverse)
Data <- expand.grid(x = 1:5,y=1:5) %>%
mutate(Value = rnorm(25))
Data %>%
filter(y!=3) %>%
ggplot(aes(x=x,y=y,fill=Value))+
geom_tile()+
scale_fill_continuous(na.value = 'salmon')
Data %>%
mutate(Value=ifelse(1:n() %in% sample(1:n(),22),NA,Value)) %>%
ggplot(aes(x=x,y=y,fill=Value))+
geom_tile()+
scale_fill_continuous(na.value = 'salmon')
これに対する簡単な修正は、完全な関数を使用して欠落している値を明示的にすることです。
Data %>%
filter(1:n() %in% sample(1:n(),22)) %>%
complete(x,y) %>%
ggplot(aes(x=x,y=y,fill=Value))+
geom_tile()+
scale_fill_continuous(na.value = 'salmon')
場合によっては、拡張機能の方が完全な機能よりも便利な場合があります。
データがグリッドのようなデータである場合、geom_tile()
によってNAに別のsubset()
を追加するのはどうですか?
# 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)
後世のために、ここにggplot2
バージョン1.9.3と互換性のある正しいソリューションがあります
+ theme(panel.background=element_rect(fill="blue", colour="blue")
Joranの回答では、plot.background
は、タイトルや凡例などを含むプロット全体です。panel.background
は、データが表示される領域です。
Ggplot2の最新バージョンでは、opts
はtheme
に置き換えられ、theme_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サイクルとメモリを使用して、プロットをレンダリングするのに非常に苦労しました。
この答えはおそらく少し「かわいい」かもしれませんが、1つの解決策は、プロットの背景色を単にスケールの最小色に変更することでしょうか?例えば:
+ opts(plot.background = theme_rect(colour = "blue")
プロットの構造がより複雑で、これが発生したくない領域の背景が青くなる場合は、最初にgeom_rect
レイヤーをプロットして、データの範囲のみに拡張することができます。