【问题标题】:Heatmap - with diagonally split tiles热图 - 对角分割图块
【发布时间】:2018-09-26 02:17:42
【问题描述】:

我们可以用R来绘制这个图吗?一个网格单元有两个值?

显示柯伊伯距离值的热图(左上 三角形)和(1-PSS)值(右下三角形)

其实这个图有两个相关系数,左上三角是一个,右下三角是另一个。有谁知道如何在 R 中绘制这个数字?

我尝试过使用这些包,但我做不到。

library(corrplot) 
library(ggcorrplot)
library(GGally)

【问题讨论】:

  • 请让这个问题可重现。这包括示例代码(包括列出非基础 R 包)、示例数据(例如,dput(head(x)))和预期输出。参考:stackoverflow.com/questions/5963269stackoverflow.com/help/mcvestackoverflow.com/tags/r/info。否则这非常接近“推荐或查找书籍、工具、软件库”,在 SO 上是 off-topic
  • 这似乎与您的 previous question 相同,后者因不清楚而被关闭。请仔细阅读上面提供的参考资料 r2evans;他们应该给你一些关于如何改进问题的想法。
  • 再次问同样的问题我明白你在做什么;)我认为一个单元格中的两个值很明显用于两个变量之间的关系。
  • 一个正方形的分割是什么意思?

标签: r ggplot2 ggplotly


【解决方案1】:

这是一个适合我的例子。

## First of all define your palette colours with:

### I assume that the dimension of PSS_values= Kuiper_distance_values=8,16 

### "ncol1" will be the palette colours for Kuiper distance values (upper-left triangles) while the "ncol2" will for the (1-PSS) values (bottom-right triangles)



color.gradient <- function(x, colors=c(mypal), colsteps=100) {return(colorRampPalette(colors) (colsteps) [ findInterval(x, seq(min(x),max(x), length.out=colsteps)) ] )}


ncol1=matrix(color.gradient(as.vector(Kuiper_distance_values[,rev(1:16)])),nrow=8,ncol=16)

ncol2=matrix(color.gradient(as.vector(PSS_values[,rev(1:16)])),nrow=8,ncol=16)


y=seq(1,16),x=seq(1,8)

par(mfrow=c(1,1))


par(oma=c(15,8,4,2))

plot(1,1,xlim=c(0.75,8.25),ylim=c(0.75,16.25), type="n",bty="n" ,xaxt="n",yaxt="n",xlab="",ylab="")



for(i in 1:8){ 
for(j in 1:16){
polygon(x[i]-0.5+c(0,1,1),y[j]-0.5+c(0,0,1),col=ncol1[i,j])

polygon(x[i]-0.5+c(0,1,0),y[j]-0.5+c(0,1,1),col=ncol2[i,j])

}}


Listofclimateindex=c("Annuelmean","DJFmean","JJAmean","etc")
Listofclimatemodels=c("ERA5I","MERRA2","CRCM5-OUR","CRCM5-UQAM","CanRCM4","HIRHAM5","RCA4","RegCM4","WRF","ENSmean")

axis(side=2, at= 1:16,labels=rev(Listofclimatemodels), las=1, cex.axis=2,font=2)

axis(side=3, at= 1:8,labels=Listofclimateindex,las=1, cex.axis=2.5,font=2)


abline(h=seq(from=0.5,to=ncol(PSS_values[,rev(1:16)])+0.5,by=1),lty=1,col="white",lwd=1)

abline(v=seq(from=0.5,to=nrow(PSS_values[,rev(1:16)])+0.5,by=1),lty=1,col="white",lwd=1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 2018-10-19
    • 2015-05-29
    • 1970-01-01
    • 2022-10-17
    相关资源
    最近更新 更多