通过混合字符和数值变量重新排序 ggplot2 条形图

Reordering ggplot2 barplots by a mixed character and numerical variable

我正在 ggplot 中制作条形图,如下所示:

这是我的代码:

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 的 "numeric order" 中?

绘图的顺序取决于因素水平的排列方式。默认情况下,这是按字母顺序完成的。有几种方法可以做到,但在不了解更多数据的情况下,您可以这样做:

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)

当你在 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)

好吧,我使用以下代码使用了一种快速而肮脏的方法来解决这个问题

ggplot(melted,], aes(x = c, y = value)) + 
geom_bar(stat="identity", width = 0.3) + 
geom_hline(yintercept  = scale_reflist$reference_score[i]) + 
scale_x_discrete(limits=melted$c)

通过在最后一条语句中对它们进行排序。不知道这是不是 "ok" 方法。任何反馈都适用