如何在 R 中绘制漂亮的散点图?

机器算法验证 r 数据可视化 散点图
2022-04-20 21:33:12

我正在努力做以下事情并且已经徒劳地花了几个小时:

我想做散点图。但是考虑到这些点的高度分散,我想对 x 轴进行分箱,然后对于 x 轴的每个箱,绘制每个箱中数据点的 y 值的分位数:

  1. x 轴上统一的 bin 大小;
  2. 每个箱中的观察次数相等;

(这两个是不同的情况。)

如何在 R 中做到这一点?我想为了漂亮,我最好在ggplot2中做?

这个问题的根源是一个简单的散点图有太多的高分散点产生了太多的点在各处飞来飞去。
我们正在尝试使图表平滑一点...
有什么好的建议吗?

“绘制每个箱的分位数”怎么样?

但是分位数是如何绘制的?我应该指定 50% 的分位数等吗?


[ps 更新 3/11/2011]:我正在尝试以下 R-help 帖子:

DAT <- data.frame(x = runif(1000, 0, 20), y = rnorm(1000))
DAT$xbin <- with(DAT, cut(x, seq(0, 20, 2)))

p <- ggplot(DAT, aes(x = x, y = y)) + geom_point(alpha = 0.2) +
stat_quantile(aes(colour = ..quantile..), quantiles = seq(0.05, 0.95,
by=0.05)) + facet_wrap(~ xbin, scales = "free")
print(p)

我的问题是:

1)如何使其沿 x 轴的每个 bin 中的“点数相等”?即我的问题中的原始数字 2 要求?

2)而且,无论我如何更改quantiles = seq(0.05, 0.95, by=0.05))行,每个 bin 中的行数和每个图右侧的图例数都是不同的......

有什么问题?我在这里错过了什么吗?

我以为分位数线的数量和图例的数量应该完全一样,不是吗?

3个回答

您可以在新版本的 ggplot2 (0.9) 中执行此操作。

你可以试试:

library(ggplot2) #make sure the newest is installed

df <- data.frame(v1 = runif(1000), v2 = runif(1000))

bin.plot<-qplot(data=df,
                x=v1,
                y=v2,
                z=v2)

基本情节

bin.plot+stat_summary_hex(fun=function(z)length(z))

使用六边形分箱绘图

bin.plot+stat_summary2d()(fun=function(z)length(z))

使用矩形分箱绘图

如果您只想对一个变量进行分类,这些也可能很有趣

geom_violin
geom_dotplot

您也可以先对数据进行分箱,然后对其进行抖动。

ggplot2 0.9 的发行说明:http: //cloud.github.com/downloads/hadley/ggplot2/guide-col.pdf

对于 ggplot2 的开发版本

#library(devtools)
#dev_mode()
#install_github("ggplot2")
#library(ggplot2)

您可能想查看“SAS 和 R”中的这两个条目:

http://sas-and-r.blogspot.com/2011/07/example-91-scatterplots-with-binning.html
http://sas-and-r.blogspot.com/2011/07/example-92 -transparency-and-bivariate.html

它们涵盖了在大量数据的散点图中使用分箱、透明度和二元核密度估计器。它们可以作为不错的起点。

我对 ggplot2 比较有偏见,所以我不会评论你是否需要用它来美化——我发现这些条目中的数字非常吸引人。

这并不是您关于在 ggplot2 中对一个简单的解决方案进行分箱以处理散点图中的大量数据的问题的真正答案是使用 alpha 参数来设置一些透明度

> df <- data.frame(v1 = rnorm(100000), v2 = rnorm(100000))
> ggplot(df, aes(x=v1, y=v2)) + geom_point(alpha = .01) + theme_bw()

结果