gpt4 book ai didi

r - 确定 ggplot2 绘图区域的宽度

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

我正在尝试使用 gridExtra 组合两个 ggplot2 条形图(坐标翻转,以便标签占据水平空间)。问题是有些标签很短,有些很长。无论标签的宽度如何,我都希望左右列的宽度相同。这是一个例子:

library(ggplot2)
library(gridExtra)

datashort <- data.frame(ecks = c("Short1", "Short2", "Short3"), why = c(30, 20, 40))
datalong <- data.frame(ecks = c(paste0("Really, Really, Really, Really Long", c(1:3))),
why = c(20, 30, 40))

plotshort <- ggplot(data = datashort, aes(x = ecks, y = why, width = .5)) +
geom_bar(stat = "identity") +
scale_y_continuous(breaks = c(10, 20, 30, 40, 50), limits = c(0, 50)) +
coord_flip()

plotlong <- ggplot(data = datalong, aes(x = ecks, y = why, width = .5)) +
geom_bar(stat = "identity") +
scale_y_continuous(breaks = c(10, 20, 30, 40, 50), limits = c(0, 50)) +
coord_flip()

grid.arrange(plotshort, plotlong, ncol = 2)

如果你这样做,你会得到一个非常宽的左图表和一个非常压扁的右图表。我知道您可以为网格排列添加宽度,但我想确切地知道它们应该是多少。这里看起来 widths=c(.4, .6) 效果很好,但并不准确。此外,您必须通过反复试验才能到达那里,这并不理想。有什么方法可以弄清楚实际的绘图区域是多少,以便您可以计算出正确的宽度?

最佳答案

一个非常简单的解决方案是使用 cowplot:

cowplot::plot_grid(plotshort, plotlong, ncol = 2,align = "v")

enter image description here

参数 align 允许您将绘图区域设置为相等。

或者另一种选择是在标题中添加一些中断:

library(stringr)

plotlong <- datalong %>%
mutate(ecks = str_replace_all(ecks, "[[:punct:]]\\s|\\s", "\\\n")) %>%
ggplot(aes(x = ecks, y = why, width = .5)) +
geom_bar(stat = "identity") +
scale_y_continuous(breaks = c(10, 20, 30, 40, 50), limits = c(0, 50)) +
coord_flip()

cowplot::plot_grid(plotshort, plotlong, ncol = 2,align = "v")

enter image description here

如果你添加了中断,那么你可以使用 grid.arrange

grid.arrange(plotshort, plotlong, ncol = 2)

enter image description here

关于r - 确定 ggplot2 绘图区域的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51736444/

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