绘图中的颜色点因值向量而异

Posted

技术标签:

【中文标题】绘图中的颜色点因值向量而异【英文标题】:Colour points in a plot differently depending on a vector of values 【发布时间】:2012-04-14 08:30:21 【问题描述】:

我正在使用 R 的 plot() 函数绘制下图。它是一个向量shiftTime 的时间偏移图。我有另一个向量 intensity 的强度值范围从 ~3 到 ~9。我想根据这些具有颜色渐变的值在图中为我的点着色。我可以在实际绘制点的值上找到颜色的示例,因此在这种情况下,向量shiftTime 的值。是否也可以使用不同的向量,只要对应的值在同一个索引上?

【问题讨论】:

【参考方案1】:

colorRamp() 返回一个函数,用于为 0:1 区间内的数字分配颜色。

pal <- colorRamp(c("blue", "green", "orange", "red"))

现在rgb() 可以用来从这个函数中得到一个可用的颜色:

rgb(pal(0.5), max=255)
[1] "#7FD200"

因此,如果将向量转换为 0-1 范围,则可以使用 pal() 进行颜色分配。

完整演示:

x <- rnorm(1000)

# NOTE: (x-min(x)) / diff(range(x)) transforms x to have a range of 0:1
pal <- colorRamp(c("blue", "green", "orange", "red"))    # 1) choose colors
col <- rgb(pal((x - min(x)) / diff(range(x))), max=255)  # 2) interpolate numbers

plot(x, col=col, pch=19)

【讨论】:

【参考方案2】:

在基础 R 中为 joran 的答案添加图例:

legend("topleft",title="Decile",legend=c(1:10),col =rbPal(10),pch=20)

此示例添加“,cex=0.8”只是为了美观:

【讨论】:

你如何让这个图例成为一个连续的颜色渐变条? 如何在参数图例中使用正确的值? (不是图例=c(1:10))?? 使用cut(dat$y,breaks = 10) 获取参数图例中的正确值【参考方案3】:

使用ggplot2的解决方案:

library(ggplot2)

#Some sample data
x <- sort(runif(100))
dat <- data.frame(x = x,y = x^2 + 1)
# Some external vector for the color scale
col <- sort(rnorm(100))

qplot(x, y, data=dat, colour=col) + scale_colour_gradient(low="red", high="blue")

【讨论】:

【参考方案4】:

这是使用基本 R 图形的解决方案:

#Some sample data
x <- runif(100)
dat <- data.frame(x = x,y = x^2 + 1)

#Create a function to generate a continuous color palette
rbPal <- colorRampPalette(c('red','blue'))

#This adds a column of color values
# based on the y values
dat$Col <- rbPal(10)[as.numeric(cut(dat$y,breaks = 10))]

plot(dat$x,dat$y,pch = 20,col = dat$Col)

【讨论】:

我觉得这可能相当直观,但为了澄清一下,调色板中使用的“10”是指该范围内的颜色数量。这甚至可以被分离出来并分配给一个变量以获得更可配置的图表。 这对于连续增加的数据来说很好,但是如果一个点低于前一个点呢?这种颜色编码不会显示出来。 对不起那个joran

以上是关于绘图中的颜色点因值向量而异的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB中的绘图函数有那几种颜色呀?

Python:如果超出特定范围,是不是可以更改绘图中的线条颜色?

R语言颜色综合运用与色彩方案共享

在xcode中替换openGl绘图中的特定颜色?

matlab 2016 绘图中的标准 RGB 颜色

如何使用VBA更改CAD绘图中的颜色