仅使用一个变量(无值或排名)对 ggplot2 条形图中的条形重新排序?
Posted
技术标签:
【中文标题】仅使用一个变量(无值或排名)对 ggplot2 条形图中的条形重新排序?【英文标题】:Reordering bars in ggplot2 bar graph using only one variable (w/o value or ranking)? 【发布时间】:2018-04-02 14:47:52 【问题描述】:我想重新排列我的 ggplot 条形图的条形 - 在 *** 上有很多类似的条目(例如 here)。
但是,我的问题是:你能不能只用一个变量(用于条形图的那个)来做到这一点,方法是告诉 ggplot 不要按标签的字母顺序排序,而是将相同标签的计数作为兴趣。
就我而言,我有关于哪个政党支持某个问题/在给定问题领域最有能力的问题的调查数据。
respondent-id competence
1 "Party A"
2 "Party A"
3 "Party B"
4 "Party B"
5 "Party B"
6 "Party C"
ggplot 现在要做的是一个条形图,其中包含第二高的第一(A 方)、第二高的(B 方)和最低的最后(C 方)。但是我如何告诉 ggplot 将计数考虑在内(2:3:1 --> 首先放置 B 方)?
我按照here 的建议尝试了几种方法,但这并没有解决问题:它们中的大多数都包含一个位置变量,它会告诉 ggplot “将 B 方分配到第一名”。我也尝试通过“能力”来reorder()
,但没有成功。最后,我可以为各方分配不同的前缀(“1_party_B”、“2_...”),但这真的很乏味。
ggplot(MyData, aes(x=competence,y=(..count..))) + geom_bar()
另外,我的条形图中有一个 NA 条,而 MyData[,c("competence")]
似乎没有起到作用。但那是另一回事了。
提前致谢!
【问题讨论】:
首先您必须创建另一个带有计数的表,然后绘制它们。使用table()
为每一方准备计数表
【参考方案1】:
library(ggplot2)
df
# resp comp
# 1 1 Party A
# 2 2 Party A
# 3 3 Party B
# 4 4 Party B
# 5 5 Party B
# 6 6 Party C
df1 <- data.frame(table(df$comp))
df1
# Var1 Freq
# 1 Party A 2
# 2 Party B 3
# 3 Party C 1
使用factor()
手动排列关卡
df1$Var1 <- factor(df1$Var1, c("Party B", "Party C", "Party A"))
df1
# Var1 Freq
# 2 Party B 3
# 3 Party C 1
# 1 Party A 2
ggplot(df1, aes(x = Var1, y = Freq)) + geom_bar(stat = "identity")
聚会的频率降序
df1 <- data.frame(table(df$comp))
df1
# Var1 Freq
# 1 Party A 2
# 2 Party B 3
# 3 Party C 1
df1 <- df1[order(df1$Freq, decreasing=TRUE),]
df1
# Var1 Freq
# 2 Party B 3
# 1 Party A 2
# 3 Party C 1
ggplot(df1, aes(x = Var1, y = Freq)) + geom_bar(stat = "identity")
【讨论】:
【参考方案2】:根据您是否需要降序,您可以简单地使用dplyr
和reorder
。
library(dplyr)
library(ggplot2)
count(df, competence) %>%
ggplot(aes(x = reorder(competence, -n), y = n)) +
geom_col()
【讨论】:
以上是关于仅使用一个变量(无值或排名)对 ggplot2 条形图中的条形重新排序?的主要内容,如果未能解决你的问题,请参考以下文章
ggplot2每组仅包含一个观察值-在一张图上绘制两条线[重复]