【问题标题】:One colour gradient according to value in column scatterplot in R根据R中列散点图中的值的一种颜色渐变
【发布时间】:2013-09-20 13:19:59
【问题描述】:

我想让我的散点图圆圈根据一列中的值进行着色。

"value"; "avg.sal"; "avg.temp"
2,5698; 34,27254; 4,44
5,4361; 34,30686; 4,64
2,27; 34,3538; 8,05
5,6015; 34,50136; 5,01
2,27; 34,37596; 7,4

我已经准备好我的绘图,y 轴为盐度,x 轴为温度。

plot(df$avg.sal, df$avg.temp)

如何根据“值”列对圆圈进行着色(例如从浅蓝色到深蓝色)?这些值的范围很大,但较小的值(例如 2)应该是浅蓝色,较大的值(例如 10)应该是深蓝色。我宁愿不使用 GGplot。

【问题讨论】:

标签: r colors gradient scatter-plot


【解决方案1】:
dat <- read.delim(text='"value"; "avg.sal"; "avg.temp"
 2,5698; 34,27254; 4,44
 5,4361; 34,30686; 4,64
 2,27; 34,3538; 8,05
 5,6015; 34,50136; 5,01
 2,27; 34,37596; 7,4"', sep=";", dec=",")

bluefunc <- colorRampPalette(c("lightblue", "darkblue"))
plot( dat$avg.sal, dat$avg.temp, 
              col=bluefunc(5)[findInterval(dat$value, seq(2:6))] )

回答后续问题。当cex 在向量内指定时,它会控制“点”的大小:

dat$size <- 1:5
bluefunc <- colorRampPalette(c("lightblue", "darkblue"))
plot( dat$avg.sal,  dat$avg.temp,
            cex=dat$size,
            col=bluefunc(5)[findInterval(dat$value, seq(2:6))] )

【讨论】:

  • 感谢@DWin 的回复!我还在想是否可以同时使圆圈变大...对于颜色,可以说 5 种阴影并指定上述间隔...您是否也可以对圆圈的大小做同样的事情(例如浅蓝色小圆圈和深蓝色大圆圈)?我看到了这篇文章 linklink 但使用符号而不是绘图函数对我没有帮助。
  • 也许您没有为根据您的需求而变化的变量提供大小参数向量? symbols 函数接受 'circles'、'squares'、'rectangles'、'stars' 和 'thermometers' 的大小向量。
  • 抱歉,我应该稍微改一下我的问题......从 dat 文件中,第 3 行和第 5 行应该是最浅的蓝色和最小的圆圈(但相同的蓝色和相同的大小,因为它们的值=2.27),接下来是第 1 行(值=2.5698),深蓝色和更大的圆圈,下一行 2(值=5.4),最后是第 4 行(值=5.6),最深的蓝色和最大的圆圈.. .
  • 如果您希望尺寸跟随“暗度”的增加,那么只需提供与您提供给 colorRamp 函数的尺寸相同的数字参数:cex=findInterval(dat$value, seq(2:6))
  • 如果我的值要大得多...比如说直到 240... 那么是否有可能将值 0-20 作为最浅的蓝色阴影,然后是 21-40.. 41-60 ...直到 221-240 具有最深的蓝色阴影...这意味着 bluefunc(12)...谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-04-27
  • 2021-02-15
  • 2017-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-02
  • 1970-01-01
相关资源
最近更新 更多