覆盖ggplot中渐变色标的自动分配值

时间:2020-08-25 13:51:30

标签: r ggplot2

我有一个数据集遭受过度绘图。为简化起见,我将借助stat_summary图显示特定区域中的点的平均值。我的问题是,色标会调整到每个绘图中的值范围,从而使比较棘手。

下面的示例演示了p1左下角的点在〜50-〜148之间(深绿色到黄色)。在stat_summary图p2中计算平均值时,我希望它以浅绿色六边形结束,因为平均值应为〜100。但是,颜色比例会发生变化,从而使左下角的六边形变为蓝色和洋红色。

如何覆盖颜色的自动分配?我尝试设置手动中断和值,但是由于我使用的是对数色标,因此很难估计不同颜色的确切值。有没有办法将色标和分配的值从p1“复制粘贴”到p2?

可复制的示例:

library(ggplot2)  
  
x = c(3, 1, 1, 1, 10, 1, 1, 1, 8, 1, 4, 21, 2, 3, 54, 1, 2, 1, 5, 254)
y = c(1.00, 1.00, 1.00, 1.00, 2.50, 1.00, 1.00, 1.00, 8.00, 1.00, 2.00, 4.20, 1.00, 1.00, 4.91, 1.00, 1.00, 1.00, 2.50, 42.33)
z = c(71, 265, 430, 110, 80, 87, 100, 174, 111, 102, 157, 118, 267, 133, 102, 435, 107, 72, 123, 115)

df2 <- data.frame(x,y,z)

p1 <- ggplot(df2, aes(x, y)) +
  geom_point(aes(colour = z), size = 5) +
  scale_colour_gradientn(name = "z",colours = colorRampPalette(c("dark green", "green", "yellow", "orange", "red", "purple", "blue"))(100), trans = "log")

print(p1)

p2 <- ggplot(df2, aes(x, y, z = z)) + 
  stat_summary_hex() +
  scale_fill_gradientn(name = "z",colours = colorRampPalette(c("dark green", "green", "yellow", "orange", "red", "purple", "blue"))(100), trans = "log")

print(p2)

0 个答案:

没有答案