我有一个数据帧
df <- data.frame(respondent = factor(c(1, 2, 3, 4, 5, 6, 7)),
location = factor(c("US: California", "US: Oregon", "Mexico",
"US: Texas", "Canada", "Mexico", "Canada")))
有三个与美国相关的单独级别 . 我不想破坏它们,因为状态之间的区别对数据分析很有用 . 然而,我想要一个基本的条形图,将美国各州叠加在一起,以便在条形图中有三个条形图 - 加拿大,墨西哥和美国 - 最后一个分为三个状态,而不是这个:
ggplot(df, aes(location, 1))+
geom_bar(stat = "identity")+
theme(axis.text.x = element_text(angle = 45, hjust = 1),
text = element_text(size=10))
这给了我五个酒吧,其中三个为美国 .
Stackoverflow上有一个旧的类似问题(Grouping/stacking factor levels in ggplot bar chart),但给出的解决方案非常复杂 . 我希望有一种更简单的方法来实现这一目标 . 有什么想法可以做到吗?
1 回答
tidyverse
解决方案:使用tidyr
中的separate
将:
的位置拆分为两列,一列用于国家,一列用于州 . 没有冒号分隔符的位置将获得NA
for state,您可以使用"Outside US"替换它 .我把这个非美国级别移到了最后,所以它会出现在传奇的最后,但这可能不是你的目的所必需的 . 然后根据状态设置填充,这样您就可以看到US值按状态叠加 .
您可能还需要设置一个刻度,使非美国值的静音或灰色与叠加的颜色形成对比,但我会将设计问题留给您 .
由reprex package(v0.2.0)创建于2018-05-24 .