我正在尝试考虑如何存储多个变量的预先计算的汇总统计信息,并使用它们创建一个使用ggplot的并排(dodge)条形图,然后使用第三个变量创建一个分面并排的曲线图。
我想创建两个图。
作为示例,首先,我想使用这些数据的并排条形图来比较y1和y2:
x <- c("A", "B", "C", "D")
y1 <- c(24, 26, 31, 19)
y2 <- c(16, 22, 33, 29)
然后,我希望使用这些数据获得一个小平面包装的并排条形图的外观:
x <- c("A","B","C","D")
y1_facet1 <- c(78, 7, 9, 6)
y2_facet1 <- c(67, 10, 15, 8)
y1_facet2 <- c(77, 7, 9, 7)
y2_facet2 <- c(70, 9, 13, 8)
任何人所能提供的任何帮助都将非常感谢!
发布于 2021-10-28 18:50:12
如果您首先将数据整形为更长的格式,则使用ggplot2会更容易。在这里,我使用tidyr::pivot_longer(-x)
获取所有非x
的列,并将它们组合成成对的name
(即源列)和value
。然后我们可以使用group
/fill
/color
等将它们映射到不同的组--这里最简单的是使用fill
来确定单独的条形图应该是什么,以及应该如何根据它们所关联的系列在填充中区分它们。
library(tidyverse) # uses ggplot2, dplyr, tidyr
x <- c("A", "B", "C", "D")
y1 <- c(24, 26, 31, 19)
y2 <- c(16, 22, 33, 29)
data1 <- data.frame(x, y1, y2) %>%
pivot_longer(-x)
plot1 <- ggplot(data1, aes(x, value, fill = name)) +
geom_col(position = position_dodge())
x <- c("A","B","C","D")
y1_facet1 <- c(78, 7, 9, 6)
y2_facet1 <- c(67, 10, 15, 8)
y1_facet2 <- c(77, 7, 9, 7)
y2_facet2 <- c(70, 9, 13, 8)
data2 <- data.frame(x, y1_facet1, y2_facet1, y1_facet2, y2_facet2) %>%
pivot_longer(-x) %>%
separate(name, c("name", "facet"))
plot2 <- ggplot(data2, aes(x, value, fill = name)) +
geom_col(position = position_dodge()) +
facet_wrap(~facet)
library(patchwork)
plot1 + plot2 + plot_layout(guides = "collect")
或者,您可以先将数据合并到一个图中。如果希望调整facet顺序,可以将facet变量转换为因子,并使用也随tidyverse
加载的forcats
控制其顺序。
data3 = bind_rows(data1 %>% mutate(facet = "facet0"), data2)
ggplot(data3, aes(x, value, fill = name)) +
geom_col(position = position_dodge()) +
facet_wrap(~facet)
https://stackoverflow.com/questions/69759092
复制相似问题