R:太多点的散点图

我试图绘制N = 700K的两个variables。 问题是,有太多的重叠,所以剧情变成大多是黑色的坚实块。 有什么办法可以让灰度“云”的阴影是一个地区的点数的函数? 换句话说,我不想显示个别点,而是希望情节成为一个“云”,一个地区的点数越多,那个地区越黑。

解决这个问题的一个方法是使用alpha混合,这使得每个点都稍微透明。 所以地区显得更黑暗,有更多的点绘制在他们身上。

这在ggplot2很容易ggplot2

 df <- data.frame(x = rnorm(5000),y=rnorm(5000)) ggplot(df,aes(x=x,y=y)) + geom_point(alpha = 0.3) 

在这里输入图像描述

处理这个问题的另一种方便的方法是(也许更适合你的点数)是六边形分箱:

 ggplot(df,aes(x=x,y=y)) + stat_binhex() 

在这里输入图像描述

还有一个常规的老矩形装箱(图像略),更像你的传统热图:

 ggplot(df,aes(x=x,y=y)) + geom_bin2d() 

你也可以看看ggsubplot包。 这个包实现了Hadley Wickham在2011年提出的function( http://blog.revolutionanalytics.com/2011/10/ggplot2-for-big-data.html )。

(在下面,我将包括“点”层用于说明目的。)

 library(ggplot2) library(ggsubplot) # Make up some data set.seed(955) dat <- data.frame(cond = rep(c("A", "B"), each=5000), xvar = c(rep(1:20,250) + rnorm(5000,sd=5),rep(16:35,250) + rnorm(5000,sd=5)), yvar = c(rep(1:20,250) + rnorm(5000,sd=5),rep(16:35,250) + rnorm(5000,sd=5))) # Scatterplot with subplots (simple) ggplot(dat, aes(x=xvar, y=yvar)) + geom_point(shape=1) + geom_subplot2d(aes(xvar, yvar, subplot = geom_bar(aes(rep("dummy", length(xvar)), ..count..))), bins = c(15,15), ref = NULL, width = rel(0.8), ply.aes = FALSE) 

在这里输入图像描述

但是,如果你有第三个variables来控制,那么这个特性就是岩石。

 # Scatterplot with subplots (including a third variable) ggplot(dat, aes(x=xvar, y=yvar)) + geom_point(shape=1, aes(color = factor(cond))) + geom_subplot2d(aes(xvar, yvar, subplot = geom_bar(aes(cond, ..count.., fill = cond))), bins = c(15,15), ref = NULL, width = rel(0.8), ply.aes = FALSE) 

在这里输入图像描述

或者另一种方法是使用smoothScatter()

 smoothScatter(dat[2:3]) 

在这里输入图像描述

Alpha混合也很容易与基本graphics做。

 df <- data.frame(x = rnorm(5000),y=rnorm(5000)) with(df, plot(x, y, col="#00000033")) 

在这里输入图像描述

您也可以使用密度等高线( ggplot2 ):

 df <- data.frame(x = rnorm(15000),y=rnorm(15000)) ggplot(df,aes(x=x,y=y)) + geom_point() + geom_density2d() 

在这里输入图像描述

或者将密度轮廓与alpha混合相结合:

 ggplot(df,aes(x=x,y=y)) + geom_point(colour="blue", alpha=0.2) + geom_density2d(colour="black") 

在这里输入图像描述

你可能会发现有用的hexbin软件包。 从hexbinplot的帮助页面:

 library(hexbin) mixdata <- data.frame(x = c(rnorm(5000),rnorm(5000,4,1.5)), y = c(rnorm(5000),rnorm(5000,2,3)), a = gl(2, 5000)) hexbinplot(y ~ x | a, mixdata) 

hexbinplot

ggplot2中几个很好的选项的ggplot2

 library(ggplot2) x <- rnorm(n = 10000) y <- rnorm(n = 10000, sd=2) + x df <- data.frame(x, y) 

选项A:透明点

 o1 <- ggplot(df, aes(x, y)) + geom_point(alpha = 0.05) 

选项B:添encryption度等高线

 o2 <- ggplot(df, aes(x, y)) + geom_point(alpha = 0.05) + geom_density_2d() 

选项C:添加填充密度等高线

 o3 <- ggplot(df, aes(x, y)) + stat_density_2d(aes(fill = ..level..), geom = 'polygon') + scale_fill_viridis_c(name = "density") + geom_point(shape = '.') 

选项D:密度热图

 o4 <- ggplot(df, aes(x, y)) + stat_density_2d(aes(fill = ..density..), geom = 'raster', contour = FALSE) + scale_fill_viridis_c() + coord_cartesian(expand = FALSE) + geom_point(shape = '.', col = 'white') 

选项E:hexbins

 o5 <- ggplot(df, aes(x, y)) + geom_hex() + scale_fill_viridis_c() + geom_point(shape = '.', col = 'white') 

选项F:地毯

 o6 <- ggplot(df, aes(x, y)) + geom_point(alpha = 0.1) + geom_rug(alpha = 0.01) 

结合一个数字:

 cowplot::plot_grid(o1, o2, o3, o4, o5, o6, ncol = 2, labels = 'AUTO', align = 'v', axis = 'lr') 

在这里输入图像描述