gpt4 book ai didi

r - ggplot2 geom_segment() 中箭头的外观

转载 作者:行者123 更新时间:2023-12-02 05:07:56 36 4
gpt4 key购买 nike

我正在尝试在 ggplot2 中制作一个带有箭头的绘图,看起来像这样,它是使用基本 R 图形制作的。 (颜色并不重要)

enter image description here

使用ggplot2:

library(ggplot2)
library(scales)
library(grid)


df3 <- structure(list(value1 = c(51L, 57L, 59L, 57L, 56L, 56L, 60L,
66L, 61L, 61L), value2 = c(56L, 60L, 66L, 61L, 61L, 59L, 61L,
66L, 63L, 63L), group = c("A", "B", "C", "D", "E", "A", "B",
"C", "D", "E"), time = c("1999", "1999", "1999", "1999", "1999",
"2004", "2004", "2004", "2004", "2004"), y_position = c(1L, 2L,
3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L)), .Names = c("value1", "value2",
"group", "time", "y_position"), row.names = c(NA, -10L), class = "data.frame")




ggplot( df3, aes( x = value1, y = y_position, group = time, color = time)) +

geom_segment( x = min(df3$value1, df3$value2), xend = max( df3$value1, df3$value2 ),
aes( yend = y_position), color = "lightgrey", size = 19) +


scale_y_continuous( labels = df3$group, breaks = df3$y_position) +

theme_classic() + theme( axis.line = element_blank(), axis.title = element_blank() ) +

geom_segment( aes( yend = y_position, xend = value2, color = time, group = time), size = 19, alpha = 0.9,

arrow = arrow(length = unit(40, "points"),type = "closed", angle = 40) )

我明白了:

enter image description here

问题是箭头看起来不对(因为它们看起来不像第一个图)。使用 geom_segment() 并不重要。

这个问题可能会给出答案,但我希望得到一些不那么棘手的东西: Specifying gpar settings for grid arrows in R

最佳答案

更新:ggplot2 v2.1.0.9001

如果绘图位于当前窗口中,您可以直接编辑箭头的形状

grid.force()
# change shape of arrows
grid.gedit("segments", gp=gpar(linejoin ='mitre'))
# change the shape in legend also
grid.gedit("layout", gp=gpar(linejoin ='mitre'))
<小时/>

如果绘图位于当前窗口中,您可以直接编辑箭头的形状

grid.gedit("segments", gp=gpar(linejoin ='mitre'))

ggplot 现在似乎已将图例键更改为箭头形状,因此如果您也想更改这些形状,您可以在整个绘图中执行此操作

grid.gedit("gTableParent", gp=gpar(linejoin ='mitre'))
<小时/>

原始答案

不那么老套,但也许更容易?您可以编辑 ggplotGrob 返回的 grobs。

如果p是你的情节:

g <-  ggplotGrob(p)

idx <- grep("panel", g$layout$name)

nms <- sapply(g$grobs[[idx]]$children[[3]]$children , '[[', "name")

for(i in nms) {
g$grobs[[idx]]$children[[3]] <-
editGrob(g$grobs[[idx]]$children[[3]], nms[i],
gp=gpar(linejoin ='mitre'), grep=TRUE)
}

grid.newpage()
grid.draw(g)

enter image description here

关于r - ggplot2 geom_segment() 中箭头的外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29468437/

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