【问题标题】:Ordering x-axis on correlation heat map using ggplot使用 ggplot 在相关热图上排序 x 轴
【发布时间】:2013-12-05 03:26:40
【问题描述】:

我正在尝试使用 ggplot 创建相关热图,但我似乎无法控制变量在 x 或 y 轴上的顺序。具体来说, ggplot 似乎尝试按顺序对变量进行排序,但仅对第一个数字进行操作。这是问题的一个简单示例

x1<-c(1,2,3,4,5,6,6,7,4,5,6,3,4,5,6,7,8,9)

x2<-c(1,2,3,3,5,4,6,7,4,4,6,3,4,5,6,10,8,9)

x3<-c(2,2,3,5,5,4,6,4,4,4,6,3,4,5,6,10,8,9)

x4<-c(1,2,3,5,5,4,6,4,4,4,4,4,4,5,6,10,8,9)

x5<-c(1,2,3,3,5,4,6,7,4,4,6,3,4,5,6,10,8,9)

x10<-c(1,1,1,1,1,1,6,1,1,1,1,1,4,5,1,1,1,1)

new=data.frame(x1)

new$x2=x2

new$x3=x3

new$x4=x4

new$x5=x5

new$x10=x10

keep=melt(cor(new))

ggplot(keep,aes(Var1,Var2),xlab=NULL,ylab=NULL) + geom_tile(aes(fill = value),colour = "white") + scale_fill_gradient(low = "white",high = "steelblue")+theme(axis.title.x=element_blank(),axis.title.y=element_blank())

如果你运行这段代码,你会看到 x 轴是有序的

x1, x10, x2, x3, x4, x5 

而我希望它阅读

x1, x2, x3, x4, x5, x10

有没有办法指定这个顺序?

【问题讨论】:

  • accept an answer 让其他人知道您的问题已得到解答,以及帮助您获得认可的人。

标签: r ggplot2


【解决方案1】:

这对我有用:

keep$Var1 <- factor(keep$Var1, levels = unique(keep$Var1), ordered = TRUE)
keep$Var2 <- factor(keep$Var2, levels = unique(keep$Var2), ordered = TRUE)

ggplot(keep,aes(Var1,Var2),xlab=NULL,ylab=NULL) + geom_tile(aes(fill = value),colour = "white") + scale_fill_gradient(low = "white",high = "steelblue")+theme(axis.title.x=element_blank(),axis.title.y=element_blank())

【讨论】:

  • 我最终得到length(keep$Var1) 或 36,keep$Var1 的有序级别和使用此代码的警告。你不应该在factor中指定大于length(unique(keep$Var1))的级别
  • 是的,我也收到警告,它们是什么意思?
  • 他们的意思是你在因子中重复了levels,这是不对的——输入keep$Var1,你可以看到你有36个重复级别,而你只需要6个。
  • 我明白了,谢谢你的解释。我已经编辑了我的答案,现在没有收到任何警告和正确的级别数。
  • 您最好明确指定顺序。目前,您依靠抽签的运气,keep1/keep2 的值在 keep 数据集中的顺序正确。
【解决方案2】:

如果填充的零解决方案不适合您的目的,请尝试以下操作:

cust_breaks<-unique(keep$Var1[order(as.numeric(gsub("x","",keep$Var1)))])

ggplot(keep,aes(Var1,Var2),xlab=NULL,ylab=NULL) + 
  geom_tile(aes(fill = value),colour = "white") + 
  scale_fill_gradient(low = "white",high = "steelblue") + 
  theme(axis.title.x=element_blank(),axis.title.y=element_blank()) +
  scale_x_discrete(limits=cust_breaks) + 
  scale_y_discrete(limits=cust_breaks)

【讨论】:

    【解决方案3】:

    对于这个特定示例,一种选择是将变量命名为 x01x02 等,然后它们将正确排序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 2022-08-18
      • 1970-01-01
      • 2018-05-14
      相关资源
      最近更新 更多