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

时间:2012-10-08 01:10:39

标签: r ggplot2 r-faq

我正在尝试使用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是我的治疗条件顺序。然而,它不能很好地工作,并给我缺少热箱。

1 个答案:

答案 0 :(得分:96)

如果没有完整,可重复的示例,有点难以回答您的具体问题。但是这样的事情应该有效:

#Turn your 'treatment' column into a character vector
data$Treatment <- as.character(data$Treatment)
#Then turn it back into a factor with the levels in the correct order
data$Treatment <- factor(data$Treatment, levels=unique(data$Treatment))

在此示例中,因子的顺序与data.csv文件中的顺序相同。

如果您喜欢不同的订单,可以手动订购:

data$Treatment <- factor(data$Treatment, levels=c("Y", "X", "Z"))

然而,如果你有很多级别,这是危险的:如果你弄错了任何一个,那将导致问题。