我想知道是否有更好的方法来生成网格中排列的不同结果变量的4个条形图:

这是我使用的代码:
library(cowplot)
bar1 <- ggplot(data = subset(data, !is.na(MHQ_Heading_Male_Quartile))) +
geom_bar(mapping = aes(x = MHQ_Heading_Male_Quartile))
bar2 <- ggplot(data = subset(data, !is.na(AHQ_Heading_Male_Quartile))) +
geom_bar(mapping = aes(x = AHQ_Heading_Male_Quartile))
bar3 <- ggplot(data = subset(data, !is.na(MHQ_Heading_Female_Quartile))) +
geom_bar(mapping = aes(x = MHQ_Heading_Female_Quartile))
bar4 <- ggplot(data = subset(data, !is.na(AHQ_Heading_Female_Quartile))) +
geom_bar(mapping = aes(x = AHQ_Heading_Female_Quartile))
plot_grid(bar1, bar2, bar3, bar4, ncol = 2)然而,有很多重复的代码-有什么函数或方法可以用更少的行创建与ggplot2相同的绘图吗?
发布于 2018-09-04 05:59:29
我将相关的列从宽转换为长(以"_Quartile"结尾的列),然后使用facet_wrap在scales = "free"的2x2网格中显示4个图。
如下所示:
data %>%
gather(key, value, ends_with("Quartile")) %>%
filter(!is.na(value)) %>%
ggplot(aes(value)) +
geom_bar() +
facet_wrap(~ key, scales = "free", ncol = 2, nrow = 2)

发布于 2018-09-04 06:01:24
如前所述,您需要使用dplyr gather (或重塑包)将其设置为较长的格式,然后对其进行刻面处理。
`data %>%
select( MHQ_Heading_Male_Quartile, AHQ_Heading_Male_Quartile, MHQ_Heading_Female_Quartile, AHQ_Heading_Female_Quartile) %>%
gather("Type", "Range", MHQ_Heading_Male_Quartile:AHQ_Heading_Female_Quartile) %>%
filter(!is.na(Range)) %>%
ggplot(aes(x=Range)) +
geom_bar() +
facet_wrap(~Type, scales="free")`我将把清理图表的工作留给您,但这是基本前提。
发布于 2018-09-04 06:29:44
将要显示的列名提取到nms中,然后为每个列名使用qplot创建一个ggplot对象,以便bars是此类对象的列表。然后在上面运行plot_grid。
nms <- grep("Quartile", names(data), value = TRUE)
bars <- lapply(nms, function(nm) qplot(na.omit(data[[nm]]), xlab = nm))
do.call("plot_grid", bars)

https://stackoverflow.com/questions/52156028
复制相似问题