Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 自定义颜色调色板中的颜色栏_R_Colors - Fatal编程技术网

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()的这一限制可以通过以下方式轻松克服:

  • 正在打印图像()
  • 使用par扩展绘图设备的大小(pin=c(宽度、长度))
  • 使用原始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)))