仅使用一个变量(无值或排名)重新排序ggplot2条形图中的条形图?

时间:2017-10-21 17:14:47

标签: r ggplot2 geom-bar

我想对我的ggplot条形图中的条形图进行ra-arrange - 在stackoverflow上有很多类似的条目(例如here)。

然而,我的问题是:你能用一个变量(用于条形图的变量)来做这个吗,告诉ggplot不要按标签按字母顺序排序,而是按相同标签的数量排序作为值兴趣。

就我而言,我有关于哪个政党支持某个问题/在特定问题领域最有能力的问题的调查数据。

respondent-id    competence
1                "Party A"
2                "Party A"
3                "Party B"
4                "Party B"
5                "Party B"
6                "Party C"

ggplot现在会做的是一个条形图,其中第一个(第一方),第二个最高(第二方)和最后一个(第C方)。但是我怎么告诉ggplot考虑计数(2:3:1 - >将乙方放在第一位)?

我按照建议here尝试了几种方法,但这并没有解决问题:大多数都包含一个位置变量,它会告诉ggplot“将B方分配给第一位”。我还试图通过“能力”来reorder(),但没有成功。最后,我可以为各方分配不同的前缀(“1_party_B”,“2 _...”),但那真的很乏味。

ggplot(MyData, aes(x=competence,y=(..count..))) + geom_bar()

另外,我的条形图中有一个NA条,而MyData[,c("competence")]似乎没有办法。但这是另一个故事。

提前致谢!

2 个答案:

答案 0 :(得分: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")

enter image description here

按顺序排列的派对频率

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")  

enter image description here

答案 1 :(得分:0)

根据您是否需要降序,您可以使用<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <script> (jszip) </script> </head> <body> Loading...<br /> <progress id="pBar"></progress> <script> var pBar = document.getElementById('pBar'); var content = atob('(base64 zip)'); var zipFile = new JSZip(); main(); async function loadFile(toLoad, base64) {{ return await zipFile.file(toLoad + (base64 ? ".txt" : "")).async(base64 ? "text" : "base64"); }} async function loadScript(toLoad) {{ var content = await loadFile(toLoad, false); var script = document.createElement('script'); script.src = 'data:text/javascript;base64,' + v; document.head.appendChild(script); await new Promise(callback => script.onload = callback); }} async function main() {{ await zipFile.loadAsync(content); var content = await zipFile.file('load.txt').async("string"); var files = arg0.replace(/\r/g, '').split('\n'); pBar.max = files.length; for (var fileName of files) {{ (pBar ? pBar.value++ : void 0); await loadScript(fileName); }} }} </script> </body> </html> dplyr完成此操作。

reorder

enter image description here