为了账号安全,请及时绑定邮箱和手机立即绑定

如何在ggplot中创建宽度一致的图(带有图例)?

/ 猿问

如何在ggplot中创建宽度一致的图(带有图例)?

慕莱坞7535251 2019-11-12 10:31:18

我要绘制几个不同的类别。这些是不同的类别,每个类别都有自己的标签集,但是在文档中将它们分组在一起是有意义的。下面给出了一些简单的堆叠条形图示例:


df <- data.frame(x=c("a", "b", "c"),

                 y=c("happy", "sad", "ambivalent about life"))

ggplot(df, aes(x=factor(0), fill=x)) + geom_bar()

ggplot(df, aes(x=factor(0), fill=y)) + geom_bar()

问题在于,使用不同的标签,图例具有不同的宽度,这意味着绘图具有不同的宽度,如果我制作表格或\subfigure元素,结果看起来会有些愚蠢。我怎样才能解决这个问题?


有没有一种方法可以显式设置绘图或图例的宽度(绝对或相对)?


查看完整描述

3 回答

?
蝴蝶不菲

该cowplot软件包还具有align_plots用于此目的的功能(输出未显示),


both2 <- align_plots(p1, p2, align="hv", axis="tblr")

p1x <- ggdraw(both2[[1]])

p2x <- ggdraw(both2[[2]])

save_plot("cow1.png", p1x)

save_plot("cow2.png", p2x)

并将plot_grid图保存到同一文件中。


library(cowplot)

both <- plot_grid(p1, p2, ncol=1, labels = c("A", "B"), align = "v")

save_plot("cow.png", both)


查看完整回答
反对 2019-11-12
?
侃侃无极

偶然地,我注意到他在评论中建议的Arun解决方案尚未被采纳。我觉得他简单有效的方法确实值得说明。


Arun建议将图例移至顶部或底部:


ggplot(df, aes(x=factor(0), fill=x)) + geom_bar() + theme(legend.position = "bottom")

ggplot(df, aes(x=factor(0), fill=y)) + geom_bar() + theme(legend.position = "bottom")

在此处输入图片说明 在此处输入图片说明


现在,这些图具有所需的相同宽度。此外,在两种情况下,绘图区域的大小均相等。


如果有更多因素或更长的标签,则可能需要使用图例,例如,在两行或更多行中显示图例。theme()并guide_legend()有几个参数可控制图例在ggplot2。


查看完整回答
反对 2019-11-12
  • 3 回答
  • 0 关注
  • 426 浏览

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信