ggplot barplot命令xlabel

时间:2018-11-15 12:33:30

标签: r ggplot2

我正在尝试制作一个不可堆叠的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仍按字母顺序绘制标签?

1 个答案:

答案 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')