2017-05-04 11 views
2

私はMathematicaからRに切り替えていますが、私は視覚化でいくつかの問題を発見しています。連続グラデーションカラー&固定スケールヒートマップggplot2

私は次のようにヒートマップをやろうとしている:

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) 

を私はこの取得:

enter image description here

をしかし、私はこのような何かが必要です。 enter image description here

ことをそうです、私は色が、それぞれのために離散ではなく、プロットの表面上で連続的(劣化)であることを望みます 平方。他の人の質問ではデータを補間する人がいることがわかりましたが、ggplotの呼び出しの中で簡単に行うべきだと思います(Mathematicaはデフォルトで行われます)。

さらに、私は0が常に白である(したがって、正の値は暖かい色、負の値は冷たい色が分離されます)、色の分布は範囲から独立してプロット全体で常に同じになるようにロックしたいと思います(私はいくつかのデータセットの同じプロット構造を使用しますので)データの

+1

を、正しい関数は 'scale_fill_gradient2(中間点= 0であります、low = "あなたのネガカラー"、mid = "white"、high = "あなたのポジティブカラー")。これはゼロを常に白くするように制限します。 – Brian

答えて

3

あなたはinterpolate=TRUEgeom_rasterを使用することができます。

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() 

enter image description here

すべてのプロットで同じカラーマッピングをpi0にするには、scale_fill_gradient2limits引数を各プロットで同じに設定します。たとえば、次の3つのデータshortと呼ばれるフレーム、short2、およびshort3を持っている場合は、あなたがこれを行うことができます:

# Get range of `pi0` across all data frames 
pi0.rng = range(lapply(list(short, short2, short3), function(s) s$pi0)) 

次に、あなたのプロットのすべてでscale_fill_gradient2limits=pi0.rngを設定します。

0

私はあなたの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')) 
関連する問題