温馨提示:本文翻译自stackoverflow.com,查看原文请点击:ggplot2 - R: Multiple Columns for Each X-axis Element in Stacked geom_bar (ggplot)
bar-chart ggplot2 r stack

ggplot2 - R:堆叠的geom_bar(ggplot)中每个X轴元素的多列

发布于 2020-04-23 16:31:48

随着时间的推移,我掌握了不同省份不同技能类别的就业数据。我想在一张图中显示不同省份和班级的长期就业情况。下图显示了我想要的但只有一年的时间(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"))

查看更多

提问者
Hossein
被浏览
72
dc37 2020-02-07 06:11

是您要找的东西吗?

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