用R中的颜色梯度绘制曲线

时间:2018-04-09 16:57:58

标签: r ggplot2

可能是一个基本的ggplot2问题,但我有点挣扎。

例如,我有一个向量如下:

10 9 8 7 6 5 4 3 2 1 2 3 4 5 6 7 8 9 10

当数字从左到右递减,然后从中间增加时,我想为这个向量做一个简单的直线曲线(就像基本的plot()函数一样)。所以对于这个,我会得到类似倒钟的东西。

但是如何根据数字的值设置要着色的线?

数字越大,曲线的红色越多,白色越多,反之亦然,就像在热图中一样。

因此,对于这个特定的矢量,我想绘制一个反向钟,曲线的边用红色,中间用白色,中间用灰色。

提前致谢!

2 个答案:

答案 0 :(得分:3)

您可以将颜色审美映射到y。以下是使用颜色规范的示例。我使用了默认的灰色背景,以便可以看到线条的白色部分,尽管对于渐变使用更高对比度的颜色可能会更好:

library(ggplot2)

dat = data.frame(x=1:19, y=c(10:1,2:10))

ggplot(dat, aes(x,y, colour=y)) +
  geom_line(size=1) +
  scale_colour_gradient(low="white", high="red")

enter image description here

在上面的示例中,每个x值之间的颜色将相同,并将根据每个段左端的x值进行设置。如果您希望在x值之间插入颜色渐变以获得更平滑的颜色过渡,则可以绘制插值数据框:

ggplot(as.data.frame(approx(dat$x, dat$y, xout=seq(1,19,length=1000))), 
       aes(x,y, colour=y)) +
  geom_line(size=1) +
  scale_colour_gradient(low="white", high="red")

enter image description here

答案 1 :(得分:2)

使用sapply定义颜色。此示例使用预定义的热图。

values <- c(10,9,8,7,6,5,4,3,2,1,2,3,4,5,6,7,8,9,10)
heatcols <- heat.colors(10)
plot(values, xlab = '', ylab = '', 
    col = sapply(values, function(x) (heatcols[x])))

plot produced

颜色图可以是您选择的任何颜色。只需使用您选择的RGB值。

> heatcols
 [1] "#FF0000FF" "#FF2400FF" "#FF4900FF" "#FF6D00FF" "#FF9200FF" "#FFB600FF" "#FFDB00FF" "#FFFF00FF"
 [9] "#FFFF40FF" "#FFFFBFFF"