R散点图: symbol color represents number of overlapping points

标签 r matlab plot opacity heatmap

当许多点重叠时,散点图可能很难解释,因为这种重叠会掩盖特定区域中的数据密度。一种解决方案是对标绘点使用半透明颜色,这样不透明区域表明这些坐标中存在许多观测值。

下面是我在 R 中的黑白解决方案的示例:

MyGray <- rgb(t(col2rgb("black")), alpha=50, maxColorValue=255)
x1 <- rnorm(n=1E3, sd=2)
x2 <- x1*1.2 + rnorm(n=1E3, sd=2)
dev.new(width=3.5, height=5)
par(mfrow=c(2,1), mar=c(2.5,2.5,0.5,0.5), ps=10, cex=1.15)
plot(x1, x2, ylab="", xlab="", pch=20, col=MyGray)
plot(x1, x2, ylab="", xlab="", pch=20, col="black")

The advantages of using opacity to indicate point density

不过,我最近遇到了this article in PNAS ,它采用了类似的方法,但使用热图着色而不是不透明度作为重叠点数的指标。这篇文章是 Open Access,因此任何人都可以下载 .pdf 并查看图 1,其中包含我要创建的图形的相关示例。本文的方法部分表明分析是在Matlab中完成的。

为方便起见,这里是上面文章中图 1 的一小部分:

Figure 1 from Flombaum et al. 2013, PNAS

我如何在 R 中创建使用颜色而非不透明度作为点密度指标的散点图?

对于初学者,R 用户可以使用函数 tim.colors()install.packages("fields") 库中访问此 Matlab 配色方案。

有没有一种简单的方法可以制作类似于上述文章的图 1 的图形,但在 R 中?谢谢!

最佳答案

一种选择是使用 densCols() 提取每个点的内核密度。将这些密度映射到所需的色带,并按照增加局部密度的顺序绘制点,可以得到与链接文章中的非常相似的图。

## Data in a data.frame
x1 <- rnorm(n=1E3, sd=2)
x2 <- x1*1.2 + rnorm(n=1E3, sd=2)
df <- data.frame(x1,x2)

## Use densCols() output to get density at each point
x <- densCols(x1,x2, colramp=colorRampPalette(c("black", "white")))
df$dens <- col2rgb(x)[1,] + 1L

## Map densities to colors
cols <-  colorRampPalette(c("#000099", "#00FEFF", "#45FE4F", 
                            "#FCFF00", "#FF9400", "#FF3100"))(256)
df$col <- cols[df$dens]

## Plot it, reordering rows so that densest points are plotted on top
plot(x2~x1, data=df[order(df$dens),], pch=20, col=col, cex=2)

enter image description here

关于R散点图: symbol color represents number of overlapping points,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17093935/

相关文章:

r - 如何从 R 中的非平稳广义帕累托 (GP) 模型中提取参数?

用R中的英文单词替换年份

matlab - 如何为 SVM 结果绘制 3D 超平面?

matlab - MATLAB GUIDE 中的按钮回调类型

matlab - 以批处理模式运行 Matlab

r - 在 r 中绘制没有 google map API 的城市 map

python - 将字符串数据传递给 matplotlib API 时会绘制什么?

r - 在不分离分组变量的情况下均匀拆分数据框

python - 在 Python 中用多色线绘制时间序列

r - 创建新的数据框列