簡體   English   中英

調整 R 中圖像圖的色標

[英]Adjust color scale of image plot in R

image.plot函數會自動為輸入生成色標。 例如,

library(fields)
x <- 1:10
y <- 1:15
z <- outer(x, y, "+")
image.plot(x, y, z)

將生成這樣的圖形在此處輸入圖片說明 現在我想將色階調整到0到20的范圍內,任何大於20的值都需要和20一樣上色。所以我在函數參數中添加了zlim=c(0,20) ,我得到, 在此處輸入圖片說明 問題是,盡管zlim調整了色標范圍,但未為超出限制的值分配顏色。 我怎樣才能解決這個問題? 在這種情況下,我希望右上角的顏色為深紅色,即從顏色范圍的末尾分配顏色。

您可以使用z[z > 20] <- 20來實現image.plot

library(fields)
x <- 1:10
y <- 1:15
z <- outer(x, y, "+")
z[z > 20] <- 20
image.plot(x, y, z)

在此處輸入圖片說明

這是一個稍微復雜的解決方案,它可以允許對刻度軸進行額外的控制:

library(sinkr) # https://github.com/marchtaylor/sinkr
x <- 1:10
y <- 1:15
z <- outer(x, y, "+")

ncolors <- 64
colors <- jetPal(ncolors)
zlim <- c(0,20)
breaks <- c(seq(zlim[1], zlim[2], length.out = ncolors), 1e6)


op <- par(no.readonly = TRUE)
layout(matrix(1:2,1,2), widths = c(4,1), heights = 4)
par(mar = c(4,4,1,1), cex = 1)
image(x, y, z, col = colors, breaks = breaks, zlim = zlim)
par(mar = c(4,0,1,4))
imageScale(z = z, ylim = zlim, zlim = zlim, col = colors, breaks = breaks, 
  axis.pos = 4)
par(op)

在此處輸入圖片說明

在這里,我展示了如何指定刻度軸標簽(例如添加 a > ):

# additional control
op <- par(no.readonly = TRUE)
layout(matrix(1:2,1,2), widths = c(4,1), heights = 4)
par(mar = c(4,4,1,1), cex = 1)
image(x, y, z, col = colors, breaks = breaks, zlim = zlim)
par(mar = c(4,0,1,4))
imageScale(z = z, ylim = zlim, zlim = zlim, col = colors, breaks = breaks, 
  axis.pos = 4, add.axis = FALSE)
axis(side = 4, at = seq(0,20,5), 
  labels = paste0(c(rep("", 4), ">"), seq(0,20,5)), las = 2)
mtext(text = "z", side = 4, line = 3)
par(op)

在此處輸入圖片說明

我設法通過使用格子包中的 levelplot 函數來獲得一種解決方案。

grid=expand.grid(x=x,y=y)
grid$z=as.vector(z)
levelplot(z~x*y,grid,at=c(seq(0,20,length.out = 50),Inf),col.regions = tim.colors(n = 64))

結果看起來像,

在此處輸入圖片說明

但是,我仍然想知道這是否可以通過使用 image.plot 或filled.contour 來實現。 當我嘗試向其添加基本圖時,levelplot 似乎很麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM