【发布时间】:2018-08-28 14:43:52
【问题描述】:
我正在使用 R 的 plot() 函数绘制下图。它是一个向量shiftTime 的时间偏移图。我有另一个向量intensity 的强度值范围从 ~3 到 ~9。我想根据这些具有颜色渐变的值在图中为我的点着色。我可以在实际绘制点的值上找到颜色的示例,因此在这种情况下,向量shiftTime 的值。是否也可以使用不同的向量,只要对应的值在同一个索引上?
【问题讨论】:
我正在使用 R 的 plot() 函数绘制下图。它是一个向量shiftTime 的时间偏移图。我有另一个向量intensity 的强度值范围从 ~3 到 ~9。我想根据这些具有颜色渐变的值在图中为我的点着色。我可以在实际绘制点的值上找到颜色的示例,因此在这种情况下,向量shiftTime 的值。是否也可以使用不同的向量,只要对应的值在同一个索引上?
【问题讨论】:
这是使用基本 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)
【讨论】:
使用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")
【讨论】:
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)
【讨论】: