R 自定义颜色调色板中的颜色栏
我定义了一个颜色调色板:R 自定义颜色调色板中的颜色栏,r,colors,R,Colors,我定义了一个颜色调色板: my.colors = colorRampPalette(c("light green", "yellow", "orange", "red")) 如何为其绘制颜色栏“图例”项,最好仅使用基本软件包?我想要的是一个充满颜色渐变的矩形 我真正想要的是一种生成与“光栅”光栅绘制的相同类型图例(颜色栏)的方法: 我需要能够将其放置在另一个绘图的顶部。制作一个矩阵,使用带有一些轴参数的图像 my.colors = colorRampPalette(c("light green
my.colors = colorRampPalette(c("light green", "yellow", "orange", "red"))
如何为其绘制颜色栏“图例”项,最好仅使用基本软件包?我想要的是一个充满颜色渐变的矩形
我真正想要的是一种生成与“光栅”光栅绘制的相同类型图例(颜色栏)的方法:
我需要能够将其放置在另一个绘图的顶部。制作一个矩阵,使用带有一些轴参数的图像
my.colors = colorRampPalette(c("light green", "yellow", "orange", "red"))
z=matrix(1:100,nrow=1)
x=1
y=seq(3,2345,len=100) # supposing 3 and 2345 are the range of your data
image(x,y,z,col=my.colors(100),axes=FALSE,xlab="",ylab="")
axis(2)
不久前,我做了一个非常灵活的函数来实现这一点
# Function to plot color bar
color.bar <- function(lut, min, max=-min, nticks=11, ticks=seq(min, max, len=nticks), title='') {
scale = (length(lut)-1)/(max-min)
dev.new(width=1.75, height=5)
plot(c(0,10), c(min,max), type='n', bty='n', xaxt='n', xlab='', yaxt='n', ylab='', main=title)
axis(2, ticks, las=1)
for (i in 1:(length(lut)-1)) {
y = (i-1)/scale + min
rect(0,y,10,y+1/scale, col=lut[i], border=NA)
}
}
更多示例位于:colorbar。fields软件包中的plot()是标准解决方案。许多人会在这里寻找将图例放置在标准绘图区域或原始x/y范围之外的解决方案。colorbar.plot()的这一限制可以通过以下方式轻松克服:
由于绘图设备的区域现在已展开,图例将显示在原始image()绘图的外部。尝试使用x和y值可将图例放置在您希望的任何位置。使用标准参数选项,渐变图例可以是水平或垂直的 我知道这是一个非常古老的问题,答案都很好。我只是想指出,您可以从
levelplot
平滑颜色栏
制作一些假数据和颜色渐变
mat = matrix(rnorm(400,1,1), ncol=20)
grad = rev(rainbow(1000, start=rgb2hsv(col2rgb('green'))[1],
end=rgb2hsv(col2rgb('blue'))[1]))
进行打印并在颜色栏中指定打断
levelplot(mat, col.regions=grad, colorkey = list(at=seq(0,max(mat),length.out=400)))
这项功能可能是在大家提出了解决方案之后很久才添加到
levelplot
的 你的轴心比我的好+1.如果您取出dev.new,您可以使用package:Hmisc中的子绘图将其覆盖到现有绘图上。@Spacedman您如何做到这一点?我总是在plot.new()中遇到这个错误:plot region太大我不清楚“lut”是什么意思。这个链接不再有效。是的,但是你也需要“strip”参数,到目前为止,它还没有想象的那么简单。一个有效的代码示例通常是一个好答案的一部分。有趣的是,在基本R中这样做是多么困难。通常R有这么多魔力,但显然不适用于颜色条。我想统计学家们只会白纸黑字地思考?哈哈
mat = matrix(rnorm(400,1,1), ncol=20)
grad = rev(rainbow(1000, start=rgb2hsv(col2rgb('green'))[1],
end=rgb2hsv(col2rgb('blue'))[1]))
levelplot(mat, col.regions=grad, colorkey = list(at=seq(0,max(mat),length.out=400)))