MathematicaからRに切り替えていますが、視覚化にいくつかの問題があります。
私は次のようにヒートマップを作成しようとしています:
short
penetration scc pi0
1 0 0 0.002545268
2 5 0 -0.408621176
3 10 0 -0.929432006
4 15 0 -1.121309680
5 20 0 -1.587298317
6 25 0 -2.957853131
7 30 0 -5.123329738
8 0 50 1.199748327
9 5 50 0.788581883
10 10 50 0.267771053
11 15 50 0.075893379
12 20 50 -0.390095258
13 25 50 -1.760650073
14 30 50 -3.926126679
15 0 100 2.396951386
16 5 100 1.985784941
17 10 100 1.464974112
18 15 100 1.273096438
19 20 100 0.807107801
20 25 100 -0.563447014
21 30 100 -2.728923621
mycol <- c("navy", "blue", "cyan", "lightcyan", "yellow", "red", "red4")
ggplot(data = short, aes(x = penetration, y = scc)) +
geom_tile(aes(fill = pi0)) +
scale_fill_gradientn(colours = mycol)
そして私はこれを得る:
しかし、私はこのようなものが必要です:
つまり、色が正方形ごとに離散するのではなく、プロットの表面全体で連続(劣化)していることを望みます。他のSOの質問でデータを補間する人もいますが、ggplot呼び出し内でそれを行う簡単な方法があるはずです(Mathematicaではデフォルトで行われます)。
さらに、0が常に白(したがって、正の値の暖かい色と負の値の冷たい色を分離する)であり、データの範囲に関係なく、プロット全体で色の分布が常に同じになるように、カラースケールをロックしたいと思います(複数のデータセットに同じプロット構造を使用するため)
geom_raster
をinterpolate=TRUE
と一緒に使用できます。
ggplot(short , aes(x = penetration, y = scc)) +
geom_raster(aes(fill = pi0), interpolate=TRUE) +
scale_fill_gradient2(low="navy", mid="white", high="red",
midpoint=0, limits=range(short$pi0)) +
theme_classic()
すべてのプロットでpi0
の値に同じカラーマッピングを取得するには、scale_fill_gradient2
のlimits
引数を各プロットで同じに設定します。たとえば、short
、short2
、およびshort3
という3つのデータフレームがある場合、次のように実行できます。
# Get range of `pi0` across all data frames
pi0.rng = range(lapply(list(short, short2, short3), function(s) s$pi0))
次に、すべてのプロットのlimits=pi0.rng
にscale_fill_gradient2
を設定します。
私はあなたのscale_fill_gradient2
を調整します:
scale_fill_gradient2('pi0', low = "blue", mid = "white", high = "red", midpoint = 0)
プロットの色を直接比較できるようにするには、各プロットに一貫したlimits
を追加します。
scale_fill_gradient2('pi0', low = "blue", mid = "white", high = "red", midpoint = 0, limits=c('your lower limit','your upper limit'))