R Scatter Plot:符号颜色表示重叠点的数量

rba*_*att 16 matlab plot r 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")
Run Code Online (Sandbox Code Playgroud)

使用不透明度来指示点密度的优点

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

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

Flombaum等人的图1. 2013年,PNAS

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

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

是否有一种简单的方法可以制作出类似于上述文章图1的数字,但是在R?谢谢!

Jos*_*ien 32

一种选择是用于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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Gre*_*now 5

您可以通过进行六边形分级来获得类似的效果,将区域划分为六边形,根据六边形中的点数为每个六边形着色.hexbin包具有执行此操作的功能,ggplot2包中也有功能.