【问题标题】:ggplot - heat color paletteggplot - 热调色板
【发布时间】:2017-07-10 11:43:18
【问题描述】:

我想要图片中的色标:

所以从上到下我们有:

非常亮的黄色(白色)、橙色、红色、黑色、蓝色、浅蓝色到非常亮的蓝色(白色)

我希望值 0 始终显示为“黑色”。最小(负)值应该是“极亮的蓝色”。最大的值(正)应该是“极亮的黄色”。

请注意,最小值和最大值与原点 0 的距离并不相等。

这就是我所在的地方:

library(ggplot2)
df <- data.frame(xDim = c(0, 1, 2, 0, 1, 2, 0, 1, 2), yDim = c(2, 2, 2, 1, 1, 1, 0, 0, 0), high = c(0, -1, 6, -3, 8, 5, -2, 7, 5))

ggplot(df, aes(xDim, yDim)) +
    geom_raster(aes(fill = high)) +
    scale_fill_gradient2(low = "blue", mid = "black", high = "red", midpoint = 0)

【问题讨论】:

  • 改用scale_fill_gradientn,并带有适当的中断和颜色。
  • 确实如此。有没有办法自动化?我有许多具有许多不同值的 DF。
  • 您可以使用quantile 设置休息时间。还可以考虑viridis 调色板:cran.r-project.org/web/packages/viridis/vignettes/… 一些调色板看起来与您想要的相似,并且可以使用scale_fill_viridis(option="plasma") 放入ggplot

标签: r ggplot2


【解决方案1】:

scale_fill_gradientn 最适合这个。你只需要得到一个合适的颜色向量,然后为这些颜色提供一个很好的值范围。

在您的情况下,我们可以选择颜色:

col <- c('yellow', 'orange', 'red', 'black', 'blue', 'skyblue', 'white')

作为价值观:

val <- c(seq(min(df$high), 0, length.out = 4), seq(0, max(df$high), length.out = 4)[-1])

我们需要根据文档使用rescale,所以我们这样做:

p <- ggplot(df, aes(xDim, yDim)) +
  geom_raster(aes(fill = high)) +
  scale_fill_gradientn(colours = col, values = scales::rescale(val))

cowplot::ggdraw() + cowplot::draw_plot(cowplot::get_legend(p))

【讨论】:

  • 谢谢,我想我可以使用它并稍微调整一下!不错
猜你喜欢
  • 2015-04-14
  • 2020-12-16
  • 2018-09-29
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
相关资源
最近更新 更多