This question询问是否根据未汇总的表格排序条形图。我的情况略有不同。这是我原始数据的一部分:
experiment,pvs_id,src,hrc,mqs,mcs,dmqs,imcs
dna-wm,0,7,9,4.454545454545454,1.4545454545454546,1.4545454545454541,4.3939393939393945
dna-wm,1,7,4,2.909090909090909,1.8181818181818181,0.09090909090909083,3.9090909090909087
dna-wm,2,7,1,4.818181818181818,1.4545454545454546,1.8181818181818183,4.3939393939393945
dna-wm,3,7,8,3.4545454545454546,1.5454545454545454,0.4545454545454546,4.272727272727273
dna-wm,4,7,10,3.8181818181818183,1.9090909090909092,0.8181818181818183,3.7878787878787876
dna-wm,5,7,7,3.909090909090909,1.9090909090909092,0.9090909090909092,3.7878787878787876
dna-wm,6,7,0,4.909090909090909,1.3636363636363635,1.9090909090909092,4.515151515151516
dna-wm,7,7,3,3.909090909090909,1.7272727272727273,0.9090909090909092,4.030303030303029
dna-wm,8,7,11,3.6363636363636362,1.5454545454545454,0.6363636363636362,4.272727272727273
我只需要一些变量,即mqs
和imcs
,按pvs_id
分组,所以我创建了一个新表:
m = melt(t, id.var="pvs_id", measure.var=c("mqs","imcs"))
我可以将其绘制为条形图,其中可以看到 MQS 和 IMCS 之间的相关性。
ggplot(m, aes(x=pvs_id, y=value))
+ geom_bar(aes(fill=variable), position="dodge", stat="identity")
但是,我希望结果条按 MQS 值从左到右按降序排序。当然, IMCS 值应与这些值一起订购。
我怎样才能做到这一点?一般来说,给定任何熔融数据帧 - 这对于ggplot2中的图形看起来很有用,而今天我第一次偶然发现它 - 我如何指定一个变量的顺序?
答案 0 :(得分:7)
一切都在制作
pvs_id
一个因素并为其提供适当的级别:
dat$pvs_id <- factor(dat$pvs_id, levels = dat[order(-dat$mqs), 2])
m = melt(dat, id.var="pvs_id", measure.var=c("mqs","imcs"))
ggplot(m, aes(x=pvs_id, y=value))+
geom_bar(aes(fill=variable), position="dodge", stat="identity")
这会产生以下情节:
修改强>
好吧,因为pvs_id
是数字,所以它是以有序的方式处理的。如果您有一个因素,则不会假定订单。因此,即使您有数字标签pvs_id
实际上也是一个因素(标称)。就dat[order(-dat$mqs), 2]
而言,具有负号的顺序函数将数据框从变量mqs
的最大值到最小值排序。但是您对pvs_id
变量的顺序感兴趣,因此您将该列作为第二列的索引。如果你将它拆开,你会看到它给你:
> dat[order(-dat$mqs), 2]
[1] 6 2 0 5 7 4 8 3 1
现在您将其提供给levels
的{{1}}参数,并根据需要对该因素进行排序。
答案 1 :(得分:0)
使用更新的tidyverse
函数,这变得更加简单(或者至少对我来说很容易阅读):
library(tidyverse)
d %>%
mutate_at("pvs_id", as.factor) %>%
mutate(pvs_id = fct_reorder(pvs_id, mqs)) %>%
gather(variable, value, c(mqs, imcs)) %>%
ggplot(aes(x = pvs_id, y = value)) +
geom_col(aes(fill = variable), position = position_dodge())
它的作用是:
mqs
重新排序(您可以使用desc(mqs)
进行反向排序)melt
相同)geom_col
(与geom_bar
和stat="identity"
相同)