首页 > 解决方案 > 在 ggplot barplot 中为多个条添加组标签

问题描述

我有数据框

DF <- data.frame(V1 = factor(c("Option 1", "Option 1", "Option 1", "Option 2", "Option 1", "Option 2", "Option 1", "Option 1", "Option 2", NA, "Option 2", "Option 1", "Option 2", "Option 1", "Option 2", "Option 1", "Option 2", "Option 1")),
                  Location = factor(c("California", "Georgia", "Texas", "Texas", "Georgia", "Georgia", "California", "Georgia", "Texas", "Texas", "California", "Georgia", "Mexico", "Mexico", "Mexico", "Canada", "Canada", "Canada")))

当我在 ggplot 中绘制它时,它会变得有点混乱,因为美国各州和其他两个国家并排显示:

DF %>%
  filter(!is.na(V1)) %>% 
  ggplot(aes(Location, ..count..)) +
  geom_bar(aes(fill = V1), position = "dodge")

Location我可以通过重新排序变量的级别来使图更清晰:

DF$Location = factor(DF$Location, levels=c("Canada", "Mexico", "California", "Georgia", "Texas"))
DF %>%
  filter(!is.na(V1)) %>% 
  ggplot(aes(Location, ..count..)) +
  geom_bar(aes(fill = V1), position = "dodge")

但我想以某种方式标记加利福尼亚、乔治亚和德克萨斯是美国的州,例如(但不一定)在三个州的名称下方添加“美国”。有没有办法做到这一点?

下面的评论者认为这是重复的。我不这么认为。在下面链接的案例中,数据框中已经有一个“国家”等效类别。我当然可以创建一个,但是对于大型数据框来说这很耗时。我希望有一种方法可以将“国家”标签添加到情节中。

标签: rggplot2

解决方案


我会使用 facet_grid 将美国各州和其他位置分成单独的面板。像这样:

DF$isUS <- ifelse(DF$Location %in% c("California", "Georgia", "Texas"), "US States", "Rest of world")

DF %>%
  filter(!is.na(V1)) %>% 
  ggplot(aes(Location, ..count..)) +
  geom_bar(aes(fill = V1), position = "dodge") +facet_grid(~isUS, space="free", scales="free")

在此处输入图像描述


推荐阅读