通过混合字符和数值变量

时间:2017-11-10 12:55:27

标签: r plot ggplot2 bar-chart r-factor

我在ggplot中制作了一个如下所示的条形图:

barplot

这是我的代码:

ggplot(melted, aes(x = c, y = value)) + 
   geom_bar(stat="identity", width = 0.3) + 
   geom_hline(yintercept  = 33)

我的数据如下所示:

  c        variable    value
  C_2      qd          55.29899
  C_4      qd          55.00241
  C_8      qd          54.43281
  C_16     qd          53.37958

如何对条形图进行重新排序,以便它们显示在"数字顺序" C_2,C_4,C_8,C_16?

3 个答案:

答案 0 :(得分:2)

如果在R中有文本,通常会将其转换为因子。默认情况下,此因子按字母顺序排序:

> melted$c
[1] C_2  C_4  C_8  C_16
Levels: C_16 C_2 C_4 C_8

ggplot将在绘制图形时使用因子的顺序。您可以使用factor功能手动指定订单或级别:

melted$c <- factor(melted$c, levels=c("C_2", "C_4", "C_8", "C_16"))

在这种情况下,手动设置订单并不困难。或者,这可以使用gtools包中的mixedsort函数自动完成:

library(gtools)
melted$c <- factor(melted$c, levels=mixedsort(as.character(melted$c)))

使用原始代码:

ggplot(melted, aes(x = c, y = value)) + 
  geom_bar(stat="identity", width = 0.3) + 
  geom_hline(yintercept  = 33)

enter image description here

答案 1 :(得分:1)

绘图的顺序取决于您的因子水平的排列方式。默认情况下,这是按字母顺序完成的。有几种方法,但你不知道更多关于你的数据的事情:

ggplot(melted, aes(x = factor(c, levels=c("C_2", "C_4", "C_8", "C_16")), y = value)) + 
  geom_bar(stat="identity", width = 0.3) + 
  geom_hline(yintercept  = 33)

答案 2 :(得分:0)

我使用以下代码

做了一个快速而肮脏的方法来解决这个问题
<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <verbs allowUnlisted="false">
     <add verb="GET" allowed="true" />
     <add verb="POST" allowed="true" />
    </verbs>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

通过在最后一个语句中对它们进行排序。不知道这是否是一个“好”的方法。任何反馈都是适当的