2017-11-08 11 views
1

私は米国のデータを州ごとにヒートマップしています(ダミーデータを使用しています)、ダークレッドからライトレッドまで色勾配を連続的に実行しようとしています[0,50]から明るい緑色から暗緑色へ(50,100)R ggplotで離散的に分離された2つの連続した色勾配

赤から緑へのグラデーションを1つ使用すると、真ん中がかなり茶色になり、赤から白、緑に変わると。?真ん中の色で読むのは難しい誰も私が同じマップ上の2つの連続した色のグラデーションを実行する方法を見つけるのを助けることができる

ここに私のコードです:

library(ggplot2) 
library(fiftystater) 
library(colorplaner) 
library(RColorBrewer) 



# prepare data frame 
data("fifty_states") 


dft <- data.frame(state=tolower(rownames(USArrests)), USArrests) 
names(dft)[names(dft)=='Murder'] <- 'Var1' 
dft<-dft[,-c(3:5)] 


# create data 
dft$Var1 <- runif(50,0, 100) 






# map to each state's data 
p <- ggplot(dft, aes(map_id = state)) + 
# map points to the fifty_states shape data 
    geom_map(aes(fill = Var1), map = fifty_states, color = 'gray') + 
    expand_limits(x = fifty_states$long, y = fifty_states$lat) + 
    coord_map() + 
    scale_x_continuous(breaks = NULL) + 
    scale_y_continuous(breaks = NULL) + 
    labs(x = "", y = "") + 
    theme(legend.position = "bottom", 
     panel.background = element_blank()) 

p+ fifty_states_inset_boxes() 
緑の連続

pc <- p+scale_fill_gradient2(low='darkred', 
          mid = 'white', 
          high='darkgreen', 
          midpoint = 50) 

pc + fifty_states_inset_boxes() + theme(legend.position = "right") 

に赤から白に行く

私はオンラインこのパレットのものを見つけましたが、それとは全く新しいですし、それで遊んで解決策を見つけることができませんでした。しかし、それは有用であり、私はそれについて十分に知りません。ここ

#TEST 

palette <- colorRampPalette(rev(brewer.pal(11,"Spectral"))) 

pcn <- p+scale_fill_gradientn(colours = palette(4)) 

pcn + fifty_states_inset_boxes() + theme(legend.position = "right") 
+1

おそらく+ scale_fill_gradientn 'のようなもの(色= Cの( "darkred"、 "lightred"、 "ライトグリーン"、 "darkgreen")、値= Cの(0、0.5 、0.5001、1)) ' –

答えて

2

アンドリューGustarによるアイデアはさらにビットを説明する:

pc <- p + scale_fill_gradientn(colors = c("darkred", "tomato1","palegreen", "darkgreen"), 
          values = scales::rescale(c(min(dft$Var1), 
                 (max(dft$Var1)-min(dft$Var1))/3, 
                 (max(dft$Var1)-min(dft$Var1))*2/3, 
                 max(dft$Var1)))) 

pc + fifty_states_inset_boxes() + theme(legend.position = "right") 

enter image description here

をこれと等価である:values = c(0, 1/3, 2/3, 1)

scale_fill_gradientnを色任意の数のベクトルをとりあなたのデータ内の値にマッピングします。値の引数に0〜1の範囲をとりますscales::rescaleは任意の範囲ベクトルを0〜1の範囲にスケーリングします。

これは、値を定義するために

quantile(dft$Var1, seq(0, 1, length.out = n)) #n depending on the number of colors 

を使用して視覚的に満足することができます。例:アンドリューGustarは勾配を提供するvalues = c(0, 0.5, 0.5001, 1))を示唆したよう

pc <- p+scale_fill_gradientn(colors = c("darkred", "tomato1","palegreen", "darkgreen"), 
          values = scales::rescale(quantile(dft$Var1, seq(0, 1, length.out=4)))) 

pc + fifty_states_inset_boxes() + theme(legend.position = "right") 

enter image description here

最後に、あなたはOPで尋ねた:暗赤色の光赤に[0.50]から、濃い緑にライトグリーンから。から(50,100]は与える:

enter image description here

関連する問題