gpt4 book ai didi

r - ggplot 条形图中的恒定宽度

转载 作者:行者123 更新时间:2023-12-04 08:10:19 26 4
gpt4 key购买 nike

如何使用 ggplot 固定多个条形图的条形宽度和它们之间的空间,在每个图上有不同数量的条形?

这是一个失败的尝试:

m <- data.frame(x=1:10,y=runif(10))
ggplot(m, aes(x,y)) + geom_bar(stat="identity")

enter image description here
ggplot(m[1:3,], aes(x,y)) + geom_bar(stat="identity")

enter image description here

添加 width=1geom_bar(...)也没有帮助。我需要第二个图自动具有较小的宽度以及与第一个图相同的条形宽度和空间。

最佳答案

编辑:

看来 OP 只是想要这个:

library(gridExtra)
grid.arrange(p1,arrangeGrob(p2,widths=c(1,2),ncol=2), ncol=1)

我不确定,是否可以将绝对宽度传递给 geom_bar .所以,这是一个丑陋的黑客:
set.seed(42)
m <- data.frame(x=1:10,y=runif(10))
p1 <- ggplot(m, aes(x,y)) + geom_bar(stat="identity")
p2 <- ggplot(m[1:3,], aes(x,y)) + geom_bar(stat="identity")
g1 <- ggplotGrob(p1)
g2 <- ggplotGrob(p2)

我用过 str找到正确的grob和child。如有必要,您可以使用更复杂的方法来概括这一点。
#store the old widths
old.unit <- g2$grobs[[4]]$children[[2]]$width[[1]]

#change the widths
g2$grobs[[4]]$children[[2]]$width <- rep(g1$grobs[[4]]$children[[2]]$width[[1]],
length(g2$grobs[[4]]$children[[2]]$width))

#copy the attributes (units)
attributes(g2$grobs[[4]]$children[[2]]$width) <- attributes(g1$grobs[[4]]$children[[2]]$width)

#position adjustment (why are the bars justified left???)
d <- (old.unit-g2$grobs[[4]]$children[[2]]$width[[1]])/2
attributes(d) <- attributes(g2$grobs[[4]]$children[[2]]$x)
g2$grobs[[4]]$children[[2]]$x <- g2$grobs[[4]]$children[[2]]$x+d

#plot
grid.arrange(g1,g2)

enter image description here

关于r - ggplot 条形图中的恒定宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18429244/

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