如何使用geom_hex使两个图之间的颜色比例一致

时间:2019-07-01 20:10:35

标签: r ggplot2 data-visualization hexagonal-tiles

我正在尝试在两个图之间进行比较,因此我需要它们都具有相同的色标,这样才能进行真正的比较。我已经尝试了一段时间来更改geom_hex的色阶,但是我只能找到提供最小/最大截止值的方法。无论如何,是否有手动将比例尺设置为定义的范围,例如1-100?我的绘图代码和示例如下。

ggplot() +
  geom_hex(aes(x=VolumeBefore$Flow, y=SpeedBefore$Speed)) +
  xlab("Flow") + ylab("Speed (MPH)")+
  theme(legend.justification=c(1,0), legend.position=c(1,0), text = element_text(size = 20)) +
  ggtitle('Speed-Flow Before Density Plot')

ggplot() +
  geom_hex(aes(x=VolumeAfter$Flow, y=SpeedAfter$Speed)) +
  xlab("Flow") + ylab("Speed (MPH)")+
  theme(legend.justification=c(1,0), legend.position=c(1,0), text = element_text(size = 20)) +
  ggtitle('Speed-Flow After Density Plot')

Before Plot

After Plot

在这两张图片中,您可以看到比例不同,我只想使它们相同:) 谢谢!

1 个答案:

答案 0 :(得分:1)

这是使用scale_fill_gradient2oob = scales::squish的一种方法,可让您指定填充的上下限,并限制超出该范围的任何值。

请注意,如果没有规格说明,填充将使用数据中的全部密度:

ggplot(diamonds) +
  geom_hex(aes(x=carat,y=price)) +
  scale_fill_gradient2()

enter image description here

我们可以选择直接指定范围,将超出范围的任何内容都限制在该范围内。这样您就可以匹配多个图的图例范围:

ggplot(diamonds) +
  geom_hex(aes(x=carat,y=price)) +
  scale_fill_gradient2(limits = c(0, 3000), oob = scales::squish)

enter image description here