仅使用一个变量(无值或排名)对 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】:

根据您是否需要降序,您可以简单地使用dplyrreorder

library(dplyr)
library(ggplot2)

count(df, competence) %>% 
      ggplot(aes(x = reorder(competence, -n), y = n)) +
      geom_col()

【讨论】:

以上是关于仅使用一个变量(无值或排名)对 ggplot2 条形图中的条形重新排序?的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2每组仅包含一个观察值-在一张图上绘制两条线[重复]

ggplot2 并排绘制变量的均值和标准差

Grails - 非空属性仅对并发用户引用空值或瞬态值错误

在 spark sql 中用无值替换 Null 值

R语言使用ggplot2包可视化指定连续变量和风险比HR值的关系基于限制性立方样条分析方法限制性立方样条cox回归模型

shell 脚本中常用的内置变量