小编Ant*_*ntz的帖子

如何更有效地保存ggplot2对象?

我正在尝试使用ggplot2包生成带有R的加权密度图,并将它们保存为.png文件.在我的代码中,我正在生成100-1000个具有不同地理坐标的图.

问题是,如果我的数据集甚至是1500点,那么ggsave函数变得非常慢.然后大约花费100秒来保存这些图中的一个.根据我的理解,计算效率低下的原因是我正在绘制的ggplot2对象是网格,ggsave必须在保存之前打印它们.

那么,我想问有没有办法让这些ggplot2对象的保存效率更高?我的意思是除了降低kde2d密度估计的分辨率之外的任何其他方式,这确实会使数据帧被绘制得更小.

我提供了一个最小的工作示例,我生成了一个.png文件.当您在ggsave函数周围使用system.time()时,您将看到执行它需要大约100秒.

library(MASS)
library(ggplot2)
library(grid)


x <- runif(1550, 0, 100)
y <- runif(1550, 0, 100)
wg <- runif(1550, 0, 1)

data <- data.frame(x, y, wg)


source("C:/Users/cpt2avo/Documents/R/kde2dweighted.r")
dens <- kde2d.weighted(data$x, data$y, data$wg)
dfdens <- data.frame(expand.grid(x=dens$x, y=dens$y), z=as.vector(dens$z))

p <- ggplot(data, aes(x = x, y = y)) + stat_contour(data = dfdens, geom = "polygon", bins = 20, alpha = 0.2, aes(x = x, y = y, z = z, fill = ..level..)) + scale_fill_continuous(low = "green", high = "red") + …
Run Code Online (Sandbox Code Playgroud)

png r ggplot2

7
推荐指数
1
解决办法
1621
查看次数

ggplot2-修改geom_density2d以接受权重作为参数?

这是我对R社区的第一篇文章,所以请原谅我。我想在ggplot2中使用函数geom_density2d和stat_density2d绘制内核密度估计值,但问题是它们无法处理加权数据。据我了解,这两个函数从软件包MASS中调用函数kde2d进行内核密度估计。而且kde2d不会将数据权重作为参数。

现在,我在http://www.inside-r.org/node/226757上找到了kde2d的此更改版本,该版本将权重作为参数并基于kde2d的源代码。该函数的代码:

  kde2d.weighted <- function (x, y, w, h, n = 25, lims = c(range(x), range(y))) {
  nx <- length(x)
  if (length(y) != nx) 
    stop("data vectors must be the same length")
  if (length(w) != nx & length(w) != 1)
    stop("weight vectors must be 1 or length of data")
  gx <- seq(lims[1], lims[2], length = n) # gridpoints x
  gy <- seq(lims[3], lims[4], length = n) # gridpoints y
  if (missing(h)) 
    h <- c(bandwidth.nrd(x), bandwidth.nrd(y));
  if (missing(w)) 
    w <- …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 kernel-density

3
推荐指数
1
解决办法
2085
查看次数

标签 统计

ggplot2 ×2

r ×2

kernel-density ×1

png ×1