【发布时间】:2020-05-19 23:23:11
【问题描述】:
我有一个包含三列的df:
-"sample" ~包含样本名称 -“组”~包含组(第一个向上,第二个向上,保持向上,保持向下,第二个向下,第一个向下) -"value" ~包含每组中的数字。
我在sorder 中按我想要的顺序订购的样本,并作为因子在 x 轴上对刻度进行排序。
以类似的方式,我对gorder 中的组进行了排序,并将它们作为因子应用于图中的堆栈排序。
我对图例中组的顺序(及其颜色)感到满意,并希望堆栈的顺序相同。我尝试重新排序因子,但由于没有手动挑选颜色,我没有设法按照与图例相同的顺序获得堆栈。你有什么建议吗?
require(dplyr)
require(ggplot2)
gorder<-c("first up", "second up", "remain up", "remain down", "second down", "first down")
sorder<-c("55_NST", "40_NST","25_NST","ad_NST", "RH_NST", "FT_ST", "55_ST", "25_ST")
set.seed(1)
df<-data.frame(
"sample" =rep(sorder, each=6),
"group"=rep(gorder, times=8),
"value"=c(abs(rnorm(48,mean=3000, sd=500))))
df<-df%>%mutate(value =case_when(group %in% c("remain down", "second down", "first down") ~ value *(-1),
!group %in% c("remain down", "second down", "first down") ~ value))
df$sample<-factor(df$sample, levels = sorder)
df$group<-factor(df$group, levels = gorder)
ggplot(df, aes(fill=group, y=value, x=sample)) +
geom_bar(position="stack", stat="identity") +
theme_bw()+
scale_x_discrete(breaks=sorder, labels=c("55", "40", "25", "AD", "RH", "FT (ST)", "55 (ST)", "25 (ST)"))+
scale_y_continuous(breaks = seq(from = -12000,to = 12000, by = 2000))+
labs(y="number of genes", x="RWC")+
scale_fill_brewer(type = "div", palette = "RdYlGn",direction = -1)
Example graph, I would like the stacks in the same order as the legend colors
【问题讨论】:
-
您能否通过包含对象形式的最小数据集来使您的问题可重现,例如,如果数据框为 df
-
是的,当然,我把它放在了编辑里
-
scale_x_discrete(breaks = sorder...中有一个未定义的变量,sorder分配在哪里?如果是拼写错误,应该是gorder,还是有问题:Error:breaks` 和labels必须有相同的长度`。查看此链接以提出可重复的问题:speakerdeck.com/jennybc/reprex-help-me-help-you?slide=5。 -
您是否也可以使用
set.seed("a_number")来确保输出一致? -
好吧,现在肯定可以重现了