我正在尝试制作一个不可堆叠的barplot,到目前为止我能够走得很远。
因为我发现ggplot照原样绘制了data.frame,所以没有排序,所以我在将data.frame馈送到ggplot之前就对它进行了排序。我根据单词出现的顺序在哪里
Both<-Both[order(Both$occurence,decreasing=TRUE),]
结构现在看起来像
str(Both)
'data.frame': 82 obs. of 3 variables:
$ word : Factor w/ 6382 levels "a","abcc","abda",..: 1595 1994
$ occurence: int 4171 3004 2145 1821 1798 1745 1614 1539 1531 1349 ...
$ sentiment: num 0 0 0 0 0 0 0 0 0 0 ...
变量
> Both
word occurence sentiment
**19** i 4171 0
**12** m 3004 0
**34** true 2145 0
**36** kubelet 1821 1
**18** normal 1798 1
情节
ggplot(data=Both,aes(x=word,y=occurence,factor(sentiment),fill=factor(sentiment)))+
coord_flip()+geom_bar(stat="identity",position="identity")
## remove identity to make them stackable. one after the other
但是看起来ggplot根据其他词的字母顺序对我的xlabel进行排序,换句话说,这是我的Both结构中可见的数字,并且我用** **突出显示。
为什么我的订购量不够?为什么ggplot仍按字母顺序绘制标签?
答案 0 :(得分:0)
您需要从单词列中重新排序因子级别。该因子的水平顺序将用于对x轴进行排序。
例如,使用函数factor
。
require(ggplot2)
df <- data.frame(word = as.factor(c('a','b','c')),
cnt = c(10,20,15))
ggplot(df, aes(x = word, y = cnt)) +
geom_bar(stat = 'identity')
df$word <- factor(df$word, levels = c('b','c','a'))
ggplot(df, aes(x = word, y = cnt)) +
geom_bar(stat = 'identity')