【发布时间】:2018-10-27 15:00:49
【问题描述】:
我想用gglot 的geom_raster 绘制具有2 个不同渐变的2D 图,但我不知道是否有一个快速而优雅的解决方案,我被卡住了。
我想看到的效果本质上是多个geom_raster的叠加。另外,我需要一个可以扩展到 N 个不同梯度的解决方案;让我举一个 N=2 梯度的例子,它更容易理解。
我首先创建一个 100 x 100 的位置 X 和 Y 的网格
# the domain are 100 points on each axis
domain = seq(0, 100, 1)
# the grid with the data
grid = expand.grid(domain, domain, stringsAsFactors = FALSE)
colnames(grid) = c('x', 'y')
然后我为每个网格点计算一个值;想象一下像这样愚蠢的事情
grid$val = apply(grid, 1, function(w) { w['x'] * w['y'] }
我知道如何用自定义的白色到红色渐变来绘制它
ggplot(grid, aes(x = x, y = y)) +
geom_raster(aes(fill = val), interpolate = TRUE) +
scale_fill_gradient(
low = "white",
high = "red", aesthetics = 'fill')
但现在想象我每个网格点都有另一个值
grid$second_val = apply(grid, 1, function(w) { w['x'] * w['y'] + runif(1) }
现在,我如何绘制一个网格,其中每个位置“(x,y)”都用以下颜色覆盖:
- 1“白到红”渐变,值由
val给出 - 1 个“白到蓝”渐变,值由
second_val给出
基本上,在大多数应用程序中,val 和 second_val 将是两个 2D 密度函数,我希望每个梯度都代表密度值。我需要两种不同的颜色来查看值的不同分布。
我看过这个similar question,但不知道如何在我的情况下使用这个答案。
【问题讨论】:
-
感谢您的链接。到目前为止,我正在查看两者中的第一个,但我需要了解如何使用我的计算值而不是
stat_2d密度值,因为它们不是一回事。
标签: r ggplot2 gradient geom-raster