【问题标题】:Correlation Plot (-1 to 0 to +1) on rworldmaprworldmap 上的相关图(-1 到 0 到 +1)
【发布时间】:2022-12-06 11:32:56
【问题描述】:

在我的分析中,每个国家都有自己的相关系数,我想将其绘制成世界地图。相关系数的范围从 -1(应该是纯红色)到 +1(应该是纯蓝色),0(应该是白色),具有中间相关性(例如 0.5)的国家应该是一半白色和一半蓝色)。

是否已经为这样的情节设置了 catMethod 和 colourPalette?

【问题讨论】:

  • 在 ggplot2 中是可能的。你可能想尝试像scale_fill_gradientn(colours = c("red", "white", "blue"))这样的东西来开始。通过可重现的示例,其他人也可以对其进行测试。

标签: r rworldmap


【解决方案1】:

可能有问题,但它为我完成了工作。首先,我定义了一个函数,以 rworldmap 同意的形式给我一个调色板。

mkrwg <- function( plotvar, length.out= 100, col.neg= "red", col.zero= gray(0.9), col.pos= "blue" ) {
    rl <- abs(min(plotvar))/(max(plotvar) - min(plotvar))
    rr <- abs(max(plotvar))/(max(plotvar) - min(plotvar))
    rw <- head(colorRampPalette(c(col.neg, grey(0.9)))( rl * (length.out+1) ), -1)  ## remove one duplicate to merge
    wg <- colorRampPalette(c(gray(0.9), col.pos))( rr * (length.out+1) )
    c(rw,wg)
}

## test out color range
plotvar <- c(-0.1,0.1,seq( -20, 5, 1 ))  ## more range on the left
rwg <- mkrwg( plotvar )

o <- as.data.frame(do.call("rbind", lapply(  1:length(plotvar), function(wi) {
    ## cnvx is a little big buggy here, because -0.1 should be E6E6E6 rather than E6E3E3
    ## but this is just a test function
    cnvx <- function(x) (x - min(plotvar))/(max(plotvar)-min(plotvar))
    mci <- as.integer(cnvx( plotvar[wi] )*(length( rwg )-1)) + 1
    data.frame(obs=wi, val=plotvar[wi], calcindex=mci, coli=rwg[mci])
})))
    
print(o)
plot( o$val, (1:length(o$val)) %% 2, col=o$coli, cex=5, pch=16 ) ## zero value in gray

这产生

好的,我们将零值与我们非常浅的灰色相匹配。现在添加以下内容:

################################################################
## now integrate into rworldmap
################################################################

dev.new()  ## draw another figure now

plot.world <- function( ccode3, plotvar ) {
    dcs <- data.frame( ccode3, plotvar )

    sPDF <- joinCountryData2Map( dcs, joinCode = "ISO3", nameJoinColumn = "ccode3")
    sPDF <- sPDF[-which(getMap()$ADMIN=="Antarctica"),]

    rwgp <- mkrwg( plotvar )

#better:    par(mar= c(0,0,8,0), mai= c(0.3,0,0,0))
    mapCountryData( sPDF,
                   mapTitle="",
                   colourPalette=rwgp,
                   nameColumnToPlot= "plotvar",
                   numCats=max(10,length(plotvar)),
                   catMethod= "pretty",
                   #addLegend=F,
                   oceanCol='lightblue', borderCol="black", missingCountryCol="black" )
    iaw$hline( 0, lwd=0.5 )
    iaw$hline( c(-23.5, 23.5, 66.6), lwd=0.5, lty=3 )
}

library("rworldmap")

plot.world(c("USA", "MEX", "BRA", "RUS", "SDN", "CHN", "NZL", "AUS"),
           c(-4,    -3,    -3,    -2,    -1,     0,    0.5,    1) )

这产生

在这个例子中,中国是零。

小号:

  • 这里澳大利亚的绝对系数 (1) 比美国 (4) 小,但它得到了完整的“蓝色”待遇。可以改进该功能以允许更对称的治疗。

  • 颜色渐变在视觉上与我对极端红色端的品味太相似了。我尝试过带有偏见的实验,但我看不出有什么不同。但是,因为我是色盲,问题可能出在我自己身上,而不是 colorRamp 的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 2018-11-30
    相关资源
    最近更新 更多