我正在尝试使用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
有没有办法指定这个顺序?
答案 0 :(得分: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())
答案 1 :(得分:0)
对于此特定示例,一个选项是命名变量x01
,x02
等,然后他们将正确排序。
答案 2 :(得分:0)
如果填充零解决方案不适合您的目的,请尝试此操作:
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)