随着时间的推移,我掌握了不同省份不同技能类别的就业数据。我想在一张图中显示不同省份和班级的长期就业情况。下图显示了我想要的但只有一年的时间(2000年)
ggplot(df, aes(fill=classes, y=total/10^6, x=province)) +
geom_bar(position="stack", stat="identity")
但是我想在同一张图中为每个省重复两次(每年显示一次)(在示例中,我有2年)。换句话说,我想在与上图相同的图表中以2000年的柱形显示2001年的数据。
这是部分数据:
df <- structure(list(year = c(2000L, 2000L, 2000L, 2000L, 2000L, 2000L,
2000L, 2000L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L,
2001L), province = c("Alberta", "Alberta", "Alberta", "Alberta",
"Manitoba", "Manitoba", "Manitoba", "Manitoba", "Alberta", "Alberta",
"Alberta", "Alberta", "Manitoba", "Manitoba", "Manitoba", "Manitoba"
), classes = structure(c(2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L,
3L, 4L, 1L, 2L, 3L, 4L, 1L), .Label = c("[0,0.2]", "(0.2,0.4]",
"(0.4,0.6]", "(0.6,0.8]", "(0.8,1)", "1"), class = "factor"),
total = c(11387250L, 4373500L, 18250L, 3215500L, 3984750L,
1414750L, 2000L, 1222750L, 11838250L, 4390000L, 21250L, 3272750L,
4019750L, 1331750L, 7750L, 1237000L)), row.names = c(NA,
-16L), vars = c("year", "province", "classes"), drop = TRUE, class = c("grouped_df",
"tbl_df", "tbl", "data.frame"), indices = list(3L, 0L, 1L, 2L,
7L, 4L, 5L, 6L, 11L, 8L, 9L, 10L, 15L, 12L, 13L, 14L), group_sizes = c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), biggest_group_size = 1L, labels = structure(list(
year = c(2000L, 2000L, 2000L, 2000L, 2000L, 2000L, 2000L,
2000L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L, 2001L
), province = c("Alberta", "Alberta", "Alberta", "Alberta",
"Manitoba", "Manitoba", "Manitoba", "Manitoba", "Alberta",
"Alberta", "Alberta", "Alberta", "Manitoba", "Manitoba",
"Manitoba", "Manitoba"), classes = structure(c(1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), .Label = c("[0,0.2]",
"(0.2,0.4]", "(0.4,0.6]", "(0.6,0.8]", "(0.8,1)", "1"), class = "factor")), row.names = c(NA,
-16L), vars = c("year", "province", "classes"), drop = TRUE, class = "data.frame"))
是您要找的东西吗?
ggplot(df, aes(fill=classes, y=total/10^6, x=as.factor(year))) +
geom_bar(position="stack", stat="identity") +
facet_wrap(.~province)
如@ user12728748所建议,您可以修改面板的边距以使其看起来更像是一个绘图:
ggplot(df, aes(fill=classes, y=total/10^6, x=as.factor(year))) +
geom_bar(position="stack", stat="identity") +
facet_wrap(.~province)+
theme(panel.margin = grid::unit(-1.25, "lines"))
注意:请谨慎操作,因为如果您将设置为scales = free
,则无法使用此技巧facet_wrap
。
我一直在寻找一种在一张图中执行此操作的方法,但我忘记了如果我强制
facet_wrap
执行一行操作,它看起来就像我想要的那样,谢谢不客气;)也可以使用
facet_grid
并将其设置nrow
为1。如果添加,
theme(panel.margin = grid::unit(-1.25, "lines"))
它看起来更像一张图...@ user12728748,太好了!我不知道这个选项。我将编辑答案以提供替代方法