这里介绍一种使用“squash”库的方法。通过
makecmap()
,您可以指定颜色值和断点,并且还可以使用
base
参数指定对数拉伸。这有点复杂,但可以让您精确控制。我用它来给扭曲的数据上色,需要在“低端”获得更多定义。
为了实现彩虹调色板,我使用了内置的“jet”颜色函数,但您可以使用任何颜色集——我提供了一个使用“colorRampPalette”创建灰度斜坡的示例。
无论使用哪种渐变,都需要调整
base
值以进行数据优化。
install.packages("squash")
library("squash")
minval=0
maxval=2.0
n.cols=100
col.int=1/n.cols
colramp=makecmap(x=seq(minval,maxval,col.int),
n=n.cols,
breaks=prettyLog,
symm=F,
base=10,
colFn=jet,
col.na="red",
right=F,
include.lowest=T)
user.colfn=colorRampPalette(c("black","white"))
假设您已经在程序中创建了上述的colramp, 下面是使用colramp绘制图表的示例:
varx=1:100
vary=1:100
plot(x,y,col=colramp$colors)
要选择特定的颜色,可以通过从列表中进行子集选择,例如,colors[1:20](如果您尝试使用上面的示例,则第一个颜色将重复5次-不是真正有用的,但您可以理解逻辑并进行调整)。
在我的情况下,我有一个值网格,我想将其转换为彩色光栅图像(即对某些连续数据进行颜色映射)。以下是示例代码,使用一个虚构的矩阵:
matx=matrix(data=c(rep(2,50),rep(0,500),rep(0.5,500),rep(1,500),rep(1.5,500)),nrow=50,ncol=41,byrow=F)
maty=t(matx)
savemat(x=maty,
filename="/Users/KeeganSmith/Desktop/matx.png",
map=colramp,
outlier="red",
dev="png",
do.dev.off=T)
![The resulting image of matx](https://istack.dev59.com/lsUN0.webp)
?colorRamp
来插值颜色。 - Rui Barradas