我想对我的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")]
似乎没有办法。但这是另一个故事。
提前致谢!
答案 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")
按顺序排列的派对频率
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")
答案 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