在图表中只更改一个区域的背景颜色

12

我想仅更改图表的一部分背景颜色,这有可能吗?例如,对于下面的图表,我可能希望指出我特别关注重量在2至4吨之间的汽车,因此希望使用粉色突出显示此区域。更具体地说,我想叠加一个透明的粉色矩形,该矩形从x轴的2延伸到4,并覆盖整个y轴区域。请问如何编写代码?

p <- ggplot(mtcars, aes(wt, mpg))
p + geom_point()
2个回答

23

使用geom_rect很容易绘制矩形(文档)。您只需在aes调用中指定其尺寸即可。要更改透明度,请在下面的代码中更改alpha。

 require(ggplot2)
 p <- ggplot(mtcars, aes(wt, mpg)) 
 p + geom_point() + 
     geom_rect(aes(xmin = 2, xmax = 4, ymin = -Inf, ymax = Inf),
                   fill = "pink", alpha = 0.03))

这是否产生了类似于您所期望的东西?

尝试绘制的图形


1
PS有没有一种方法可以让它覆盖整个Y轴,而不是指定y限制? - Megan
显然可以,使用Inf来表示ymin/ymax。查看我的编辑应该会有帮助。 - Adam Kimberley

6

虽然这种方法可以使用,但我注意到它会绘制与数据点数量相同的矩形,这可能是一个问题,特别是在多个面板中,每个面板的数据点数量不同。这反映在非常低的alpha上,仅获得大约50%的透明度。我认为这是因为它使用了从ggplot()调用的数据框架和美学。

避免这种情况的一种方法是在geom_point()内调用aes(),并为矩形创建一个特定的数据框架。请注意,alpha要大得多,但效果类似。

require(ggplot2)
ggplot(mtcars) + geom_point(aes(wt, mpg)) + 
geom_rect(data=data.frame(xmin = 2, xmax = 4, ymin = -Inf, ymax = Inf),
    aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax), fill="pink", alpha=0.5)

结果 在这里输入图片描述

注:此处为一段HTML代码,无法直接翻译成中文。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接