如何在离散轴值上使用geom_rect?

16

我想绘制矩形,但我的x轴是离散值。如何设置xmin和xmax值,以便从离散值之间的某一点开始?

library(ggplot2)
df <- data.frame(x = c("a","b","c"), y = c(1,2,3))
ggplot(data = df) + geom_rect(data = NULL, aes(xmin = "b", xmax = "c", ymin = 1.5, ymax = 2.5))

这段代码绘制了一个矩形,但我想把它向左移动一点。我希望能够设置xmin="b"-0.3和xmax="b"+0.3,如果这有意义的话。

2个回答

12
你可以试试:
ggplot(data = df) +
  geom_rect(data = df, aes(x = x, y=y), xmin = as.numeric(df$x[[2]]) - 0.5,
                                        xmax = as.numeric(df$x[[3]]) + 0.5,
                                        ymin = 0, ymax = 2)

这个方法很有效,因为如果你在aes调用之外调用xmin和xmax等变量,你可以使用任何你想要的值。因子水平用于绘制图形,所以as.numeric将确保你得到正确的结果。

谢谢@jeremycg回答我的问题并且解决了它!同时也感谢你提醒我使用了因子水平。 - Mist

1
是的,“b”+0.5是有道理的,但是只有在“b”通过一个比例尺转换为数字之后才能这样做。可以通过在美学映射中使用xmax = stage(., after_scale = xmax + 0.5)来实现这一点。
ggplot(data = df, aes(x,y)) + geom_point()+
  geom_rect(data = NULL, aes(
    xmin = stage("b", after_scale = xmin-0.5),
    xmax = stage("c", after_scale = xmax+0.5),
    ymin = 1.5,
    ymax = 2.5
  ), color="red", fill = NA)

(注意,当您的矩形由data定义时,这也适用。)

2023-11-08创建,使用reprex v2.0.2生成


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