通过混合字符和数值变量重新排序 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" 方法。任何反馈都适用
我正在 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" 方法。任何反馈都适用