你如何专门订购ggplot2 x轴而不是字母顺序?

你如何专门订购ggplot2 x轴而不是字母顺序?

我想一个使heatmap使用ggplot2使用geom_tiles此功能,下面是我的代码:

p<-ggplot(data,aes(Treatment,organisms))+geom_tile(aes(fill=S))+
  scale_fill_gradient(low = "black",high = "red") + 
  scale_x_discrete(expand = c(0, 0)) + 
  scale_y_discrete(expand = c(0, 0)) + 
  theme(legend.position = "right", 
    axis.ticks = element_blank(), 
    axis.text.x = element_text(size = base_size, angle = 90, hjust = 0, colour = "black"),
    axis.text.y = element_text(size = base_size, hjust = 1, colour = "black")).

数据是我的data.csv文件
我的X轴是治疗的类型
我的Y轴是有机体的类型

我对命令和编程不太熟悉,而且我对此比较陌生。我只是想能够指定x轴上标签的顺序。在这种情况下,我试图指定“治疗”的顺序。默认情况下,它按字母顺序排序。如何覆盖此数据/保持数据的顺序与原始csv文件中的顺序相同?

我试过这个命令

scale_x_discrete(limits=c("Y","X","Z"))

其中x,y和z是我的治疗条件顺序。然而,它不能很好地工作,并给我缺少热箱。


慕容森
浏览 1002回答 2
2回答

慕尼黑的夜晚无繁华

如果没有完整,可重复的示例,有点难以回答您的具体问题。但是这样的事情应该有效:#Turn&nbsp;your&nbsp;'treatment'&nbsp;column&nbsp;into&nbsp;a&nbsp;character&nbsp;vectordata$Treatment&nbsp;<-&nbsp;as.character(data$Treatment)#Then&nbsp;turn&nbsp;it&nbsp;back&nbsp;into&nbsp;a&nbsp;factor&nbsp;with&nbsp;the&nbsp;levels&nbsp;in&nbsp;the&nbsp;correct&nbsp;orderdata$Treatment&nbsp;<-&nbsp;factor(data$Treatment,&nbsp;levels=unique(data$Treatment))在此示例中,因子的顺序将与data.csv文件中的顺序相同。如果您喜欢不同的订单,可以手动订购:data$Treatment&nbsp;<-&nbsp;factor(data$Treatment,&nbsp;levels=c("Y",&nbsp;"X",&nbsp;"Z"))但是,如果你有很多级别,这是危险的:如果你弄错了任何一个,那将导致问题。

慕码人8056858

最常见的答案提供了一种需要更改基础数据框架的解决方案。这不是必需的。也可以直接在aes()调用中进行分解,或者为此创建一个向量。这肯定与@Drew Steen的答案没什么不同,但是与不改变原始数据框架的重要区别。level_order&nbsp;<-&nbsp;c('virginica',&nbsp;'versicolor',&nbsp;'setosa')&nbsp;#this&nbsp;vector&nbsp;might&nbsp;be&nbsp;useful&nbsp;for&nbsp;other&nbsp;plots/analysesggplot(iris,&nbsp;aes(x&nbsp;=&nbsp;factor(Species,&nbsp;level&nbsp;=&nbsp;level_order),&nbsp;y&nbsp;=&nbsp;Petal.Width))&nbsp;+&nbsp;geom_col()要么level_order&nbsp;<-&nbsp;factor(iris$Species,&nbsp;level&nbsp;=&nbsp;c('virginica',&nbsp;'versicolor',&nbsp;'setosa'))ggplot(iris,&nbsp;aes(x&nbsp;=&nbsp;level_order,&nbsp;y&nbsp;=&nbsp;Petal.Width))&nbsp;+&nbsp;geom_col()或直接在aes()没有预先创建的矢量的呼叫中:ggplot(iris,&nbsp;aes(x&nbsp;=&nbsp;factor(Species,&nbsp;level&nbsp;=&nbsp;c('virginica',&nbsp;'versicolor',&nbsp;'setosa')),&nbsp;y&nbsp;=&nbsp;Petal.Width))&nbsp;+&nbsp;geom_col()
打开App,查看更多内容
随时随地看视频慕课网APP