首页 文章

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

提问于
浏览
58

这个问题在这里已有答案:

我正在尝试使用 ggplot2 使用 ggplot2 来创建 heatmap 这里是我的代码如下:

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是我的data.csv文件
我的X轴是治疗类型
我的Y轴是有机体的类型

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

我试过这个命令

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

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

2 回答

  • 4

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

    #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"))
    

    但是,如果你有很多级别,这是危险的:如果你得到任何错误,那将导致问题 .

  • 93

    最常见的答案提供了一种需要更改基础数据框的解决方案 . 这不是必要的 . 也可以直接在 aes() 调用中进行分解,或者为此创建一个向量 .

    这肯定与@Drew Steen的答案没什么不同,但是与不改变原始数据框架的重要区别 .

    level_order <- c('virginica', 'versicolor', 'setosa') #this vector might be useful for other plots/analyses
    
    ggplot(iris, aes(x = factor(Species, level = level_order), y = Petal.Width)) + geom_col()
    

    要么

    level_order <- factor(iris$Species, level = c('virginica', 'versicolor', 'setosa'))
    
    ggplot(iris, aes(x = level_order, y = Petal.Width)) + geom_col()
    

    要么
    直接在 aes() 调用中没有预先创建的向量:

    ggplot(iris, aes(x = factor(Species, level = c('virginica', 'versicolor', 'setosa')), y = Petal.Width)) + geom_col()
    

    that's for the first version

相关问题