【问题标题】:R center color palette on 0R 中心调色板在 0
【发布时间】:2015-05-29 13:06:50
【问题描述】:

我想创建一个以 0 为中心的色带。

以下代码:

library(raster)
librayr(RColorBrewer)

xmin = -124.413
xmax = -66.883
ymin = 25.9425
ymax = 48.9885
nrows = 215
ncols = 254

empty_raster = raster(xmn=xmin, ymn=ymin, nrows = nrows, ncols = ncols)
zscores_coords = cbind(seq(from=-124.413, to=-66.883, length.out=1212), 
                       seq(from=25.9425, to=48.9885, length.out=1212))
zscores_raster = rasterize(zscores_coords, empty_raster, field = 1)
x_coord_raster = rasterize(zscores_coords, zscores_raster, 
                           field=zscores_coords[,1])
y_coord_raster = rasterize(zscores_coords, zscores_raster, 
                           field=zscores_coords[,2])

BUD_zscores_coordinates = 
  data.frame(x = zscores_coords[,1], y = zscores_coords[,2], 
             BUD_zscores = seq(from=-20.51558, to=14.34510, length.out=1212))
coordinates(BUD_zscores_coordinates) = ~x+y
zscores_pres = rasterize(BUD_zscores_coordinates, zscores_raster, field=1)
zscores_points = rasterToPoints(zscores_pres)
zscores_points = zscores_points[,c(1:2)]

zscores_nodes = rasterize(BUD_zscores_coordinates, empty_raster, 
                          field = BUD_zscores_coordinates$BUD_zscores,
                          fun = mean)

#Plot! 
colorramp = brewer.pal(11,"RdBu")
applycolors = colorRampPalette(colorramp)
plot(zscores_nodes, xlim = c(xmin, xmax), ylim = c(ymin, ymax), 
     col = applycolors(100))

生成以下图形:

其中“0”位于色带的浅蓝色部分。关于如何使其与白色部分对齐的任何建议?我一直在努力使用休息无济于事。

【问题讨论】:

  • 看不到你的图表!
  • 我又试了一次,它显示在我的屏幕上,但这对我来说可能是唯一的用户。不知道还能做什么!

标签: r colors


【解决方案1】:

使用这个答案:https://stackoverflow.com/a/10986203/4632634,我能够得到解决问题所需的东西。

library(raster)
library(RColorBrewer)

xmin = -124.413
xmax = -66.883
ymin = 25.9425
ymax = 48.9885
nrows = 215
ncols = 254

empty_raster = raster(xmn=xmin, ymn=ymin, nrows = nrows, ncols = ncols)
zscores_coords = cbind(seq(from=-124.413, to=-66.883, length.out=1212), 
                       seq(from=25.9425, to=48.9885, length.out=1212))
zscores_raster = rasterize(zscores_coords, empty_raster, field = 1)
x_coord_raster = rasterize(zscores_coords, zscores_raster, 
                           field=zscores_coords[,1])
y_coord_raster = rasterize(zscores_coords, zscores_raster, 
                           field=zscores_coords[,2])

BUD_zscores_coordinates = 
  data.frame(x = zscores_coords[,1], y = zscores_coords[,2], 
             BUD_zscores = seq(from=-20.51558, to=14.34510, length.out=1212))
coordinates(BUD_zscores_coordinates) = ~x+y
zscores_pres = rasterize(BUD_zscores_coordinates, zscores_raster, field=1)
zscores_points = rasterToPoints(zscores_pres)
zscores_points = zscores_points[,c(1:2)]

zscores_nodes = rasterize(BUD_zscores_coordinates, empty_raster, 
                          field = BUD_zscores_coordinates$BUD_zscores,
                          fun = mean)

zscores_stack = stack(zscores_nodes, zscores_raster, x_coord_raster, 
                      y_coord_raster)
zscores_table = extract(zscores_stack, zscores_points)

#Plot! (bluer = flyway zscores > eBird szcores; red = eBird zscores > 
#flyway zscores)
nHalf = nrow(zscores_table)/2
Min = min(zscores_table[,1])
Max = max(zscores_table[,1])
Thresh = 0

## Make vector of colors for values below threshold
rc1 = colorRampPalette(colors = c("red", "white"), space="Lab")(nHalf)    
## Make vector of colors for values above threshold
rc2 = colorRampPalette(colors = c("white", "blue"), space="Lab")(nHalf)
rampcols = c(rc1, rc2)
## In your example, this line sets the color for values between 49 and 51. 
rampcols[c(nHalf, nHalf+1)] = rgb(t(col2rgb("white")), maxColorValue=256) 

rb1 = seq(Min, Thresh, length.out=nHalf+1)
rb2 = seq(Thresh, Max, length.out=nHalf+1)[-1]
rampbreaks = c(rb1, rb2)

r.range = c(Min, Max)
plot(zscores_nodes, xlim = c(xmin, xmax), ylim = c(ymin, ymax), 
     col = rampcols, breaks=rampbreaks, legend.width = 1, legend.shrink = 0.75, 
     axis.args=list(at=c(-20, 0, 14), labels=c(-20, 0, 14), 
                    cex.axis=0.6), 
     legend.args=list(text='Z-Score', side=4, font=2, line=2.5, cex=0.8))

产生这个:

0 正好位于白色区域的中心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 2021-01-10
    • 2012-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多