2017-05-14 93 views
2

我使用lattice程序包中的levelplot函數繪製熱點圖。在我的基質範圍從-1到1,並且值我用下面的規模:Colourscale:更改開始轉換的位置

cols <- colorRampPalette(c("blue", "white", "red"))(256) 

一個小例子:

d <- 20 
df <- expand.grid(x = 1:d, y = 1:d) 
df$z <- runif(d*d, -1, 1) 

levelplot(z ~ x * y, data = df, 
      col.regions = cols) 

enter image description here

我要調整的尺度,使得該比例較大的比例是白色的。我假設我必須手動定義過渡開始的位置,或者更好地定義不同的「過渡速度」 - 當我接近0(即白色)時速度較慢,當接近1或-1時速度更快。

任何意見如何做到這一點將不勝感激!

+0

我你並不侷限於使用'lattice',這裏是你如何可能在'ggplot'中執行:[是否可以在scale_fill_gradient2()中定義「mid」範圍?](http://stackoverflow.com/questions/21758175/is-it-possible-to-define -mid-range-in-scale-fill-gradient2/21758729#21758729) – Henrik

+0

感謝您的鏈接!如果可能的話,我想堅持點陣,因爲我想繪製一個預先存在的矩陣,而不是計算相關矩陣,我發現這在點陣中更容易... – oak

+0

好吧!但我可以向你保證,從「lattice」到「ggplot」的過渡並不困難。無論如何,祝你好運! – Henrik

回答

0

您可以將插值切換到spline以獲得更平滑的過渡。

cols <- colorRampPalette(c("blue", "white", "red"), interpolate = "spline")(256) 

enter image description here

你也可以用更漂亮的調色板去從RColorBrewer

cols2 <- colorRampPalette(RColorBrewer::brewer.pal(11, "RdBu"))(256) 
levelplot(z ~ x * y, data = df, col.regions = rev(cols2)) 

enter image description here