R中的最大绘图点?

R中的最大绘图点?,r,plot,R,Plot,我遇到过很多情况,我想画出比我实际应该画的更多的点——主要的障碍是,当我与人分享我的图或将它们嵌入到文件中时,它们占用了太多的空间。在数据帧中随机采样行非常简单 如果我想要点图的真正随机样本,很容易说: ggplot(x,y,data=myDf[sample(1:nrow(myDf),1000),]) 但是,我想知道是否有更有效的(理想情况下是罐装的)方法来指定绘图点的数量,以便您的实际数据准确地反映在绘图中。下面是一个例子。 假设我正在绘制重尾分布的CCDF,例如 ccdf <- fu

我遇到过很多情况,我想画出比我实际应该画的更多的点——主要的障碍是,当我与人分享我的图或将它们嵌入到文件中时,它们占用了太多的空间。在数据帧中随机采样行非常简单

如果我想要点图的真正随机样本,很容易说:

ggplot(x,y,data=myDf[sample(1:nrow(myDf),1000),])
但是,我想知道是否有更有效的(理想情况下是罐装的)方法来指定绘图点的数量,以便您的实际数据准确地反映在绘图中。下面是一个例子。 假设我正在绘制重尾分布的CCDF,例如

ccdf <- function(myList,density=FALSE)
{
  # generates the CCDF of a list or vector
  freqs = table(myList)
  X = rev(as.numeric(names(freqs)))
  Y =cumsum(rev(as.list(freqs)));
  data.frame(x=X,count=Y)
}
qplot(x,count,data=ccdf(rlnorm(10000,3,2.4)),log='xy')

ccdf在这种情况下,我倾向于使用png文件,而不是基于矢量的图形,如pdf或eps。这些文件要小得多,但分辨率会降低

如果是更传统的散点图,那么使用半透明颜色也有助于解决过度绘制问题。比如说,

x <- rnorm(10000); y <- rnorm(10000)
qplot(x, y, colour=I(alpha("blue",1/25)))

x除了Rob的建议之外,我喜欢的一个绘图函数是:;一个例子是。

这里是一个可能的解决方案,用于针对x轴的下采样绘图,如果它是对数变换的。它会变换x轴,对该数量进行四舍五入,并拾取该箱子中的中值x值:

downsampled_qplot <- function(x,y,data,rounding=0, ...) {
  # assumes we are doing log=xy or log=x
  group = factor(round(log(data$x),rounding))
  d <- do.call(rbind, by(data, group, 
    function(X) X[order(X$x)[floor(length(X)/2)],]))
  qplot(x,count,data=d, ...)
}


在PDF格式中,原始绘图占用640K,下采样版本分别占用20K和8K

我要么像前面提到的那样制作图像文件(png或jpeg设备),要么制作一个2D直方图的替代品,它制作一个类似的图形,但从空间的密集区域到稀疏区域的分割更加平滑

如果你以前从未见过,那就值得一看。它有一些在R中生成的非常好的图形,带有图像和示例代码

以下是该站点的示例代码:

二维直方图:

require(gplots) 

# example data, bivariate normal, no correlation
x <- rnorm(2000, sd=4) 
y <- rnorm(2000, sd=1) 

# separate scales for each axis, this looks circular
hist2d(x,y, nbins=50, col = c("white",heat.colors(16))) 
rug(x,side=1) 
rug(y,side=2) 
box() 
require(gplots)
#示例数据,二元正态,无相关性

你好,罗伯,德克-我想澄清一下,我不是在寻找一种使用不同的可视化方法来处理过度抽签的方法。我特别想做一个点图,我可以嵌入一张乳胶纸作为一个可伸缩的矢量图形。我希望这样做的方式是减少传递数据所需的绘图点的数量。那么次采样可能是最好的选择。当然,这可以通过“非均匀”采样来实现,因此您可能希望保留更多的点(甚至所有点)远离尾部,但可以显著减少主要部分。但这似乎是特定于问题的,因此您可能需要自己来解决。或者,使用ggplot2,
geom=“hex”
而不是取整,您也可以更普遍地执行以下操作:group=cut(log(data$x),b=maxpoints)您可以帮助我如何使用r来定位多条直线图中的最小点坐标吗,例如,如果最小点坐标为(17.2.333),我如何使用r仅在绘图中定位此坐标?非常感谢您的帮助!
downsampled_qplot(x,count,data=myccdf,log='xy',rounding=1,main='rounding = 1')
downsampled_qplot(x,count,data=myccdf,log='xy',rounding=0,main='rounding = 0')
require(gplots) 

# example data, bivariate normal, no correlation
x <- rnorm(2000, sd=4) 
y <- rnorm(2000, sd=1) 

# separate scales for each axis, this looks circular
hist2d(x,y, nbins=50, col = c("white",heat.colors(16))) 
rug(x,side=1) 
rug(y,side=2) 
box() 
library("geneplotter")  ## from BioConductor
require("RColorBrewer") ## from CRAN

x1  <- matrix(rnorm(1e4), ncol=2)
x2  <- matrix(rnorm(1e4, mean=3, sd=1.5), ncol=2)
x   <- rbind(x1,x2)

layout(matrix(1:4, ncol=2, byrow=TRUE))
op <- par(mar=rep(2,4))
smoothScatter(x, nrpoints=0)
smoothScatter(x)
smoothScatter(x, nrpoints=Inf,
              colramp=colorRampPalette(brewer.pal(9,"YlOrRd")),
              bandwidth=40)
colors  <- densCols(x)
plot(x, col=colors, pch=20)

par(op)