gpt4 book ai didi

r - geom_segment 大小参数 x 和 y 方向的不同行为

转载 作者:行者123 更新时间:2023-12-02 01:00:12 25 4
gpt4 key购买 nike

当我使用 annotate(geom = "segment")geom_segment 绘制水平或垂直线时,我观察到不同的行为。我正在寻找一种方法来使两条线的宽度相同。下面是一个例子:

library(ggplot2)
data("iris")

# some example graph
g <- ggplot(data = iris,
aes(x = Petal.Length, y = Sepal.Length,
group = Species, color = Species, shape = Species)) +
geom_point(size = 2.5, alpha = .6)

# axes have equal width
g + annotate("segment", x = -Inf, xend = -Inf, y = 2, yend = 8) +
annotate("segment", x = 2, xend = 8, y = -Inf, yend = -Inf)

# x-axes increased in size!
g + annotate("segment", x = -Inf, xend = -Inf, y = 2, yend = 8, size = 1) +
annotate("segment", x = 2, xend = 8, y = -Inf, yend = -Inf, size = 1)

第一次调用 g + annotate(...(没有大小参数)产生这个数字:

enter image description here

然而,第二次调用(使用大小参数)产生了这个数字:

enter image description here

很明显,x轴的宽度增加了!我的问题是,如何以通用方式避免这种情况(即不是通过将 x 轴宽度乘以相对于 y 轴的 0.7)。有什么想法吗?

编辑:

我正在使用 ggplot 3.0.0、windows 10 和 R 3.5.0

最佳答案

我可以重现这个问题。

但段宽度实际上并没有改变(至少在我的身上没有)。我实际观察到的是将线段与绘图边缘对齐的综合效果,以及 ggplot 的默认裁剪选项隐藏了部分线段:

g2 <- g + 
annotate("segment", x = -Inf, xend = -Inf, y = 2, yend = 8, size = 1) +
annotate("segment", x = 2, xend = 8, y = -Inf, yend = -Inf, size = 1) +
theme(legend.position = "none") # hide legend as it's not relevant here

# convert to grob & turn off clipping for panel layer
g2.grob <- ggplotGrob(g2)
g2.grob$layout$clip[g2.grob$layout$name=="panel"] <- "off"

gridExtra::grid.arrange(g2, g2.grob, nrow = 1)

plot

如两个图所示,关闭裁剪显示两个段的完整宽度,它们是相同的。

(我没有充分检查底层代码来回答为什么 x 方向剪裁小于 y 方向,但这似乎是一个相当小众的用例。如果您的注释片段更接近绘图中心而不是 smack在它的边缘,它们会自动显示相同的大小。)

关于r - geom_segment 大小参数 x 和 y 方向的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51175372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com