gpt4 book ai didi

r - 在 R 中高效绘制数亿个点

转载 作者:行者123 更新时间:2023-12-03 07:52:11 25 4
gpt4 key购买 nike

plot()在 R 中绘制 1 亿个左右数据点的最有效方法?
我想绘制一堆这些 Clifford Attractors .这是我从非常大的图像缩小的示例:

A Clifford attractor

Here是我用来绘制非常大的 8K (7680x4320) 图像的一些代码的链接。

生成 50 或 1 亿个点(使用 Rcpp)不需要很长时间,也不需要获取颜色 + 透明度的十六进制值,但实际绘制并保存到磁盘是 减缓。

  • 有没有更快的方法来绘制(并保存)所有这些点?
  • R 只是这项工作的坏工具吗?
  • 即使您无法将它们全部放入 ram,您会使用什么工具来绘制数十亿个点?
  • 使用 1990 年代的软件和硬件如何制作这种类型(颜色 + 透明度)的高分辨率绘图?

  • 编辑:使用的代码
    # Load packages
    library(Rcpp)
    library(viridis)

    # output parameters
    output_width = 1920 * 4
    output_height = 1080 * 4
    N_points = 50e6
    point_alpha = 0.05 #point transperancy

    # Attractor parameters
    params <- c(1.886,-2.357,-0.328, 0.918)

    # C++ function to rapidly generate points
    cliff_rcpp <- cppFunction(
    "
    NumericMatrix cliff(int nIter, double A, double B, double C, double D) {
    NumericMatrix x(nIter, 2);
    for (int i=1; i < nIter; ++i) {
    x(i,0) = sin(A*x(i-1,1)) + C*cos(A*x(i-1,0));
    x(i,1) = sin(B*x(i-1,0)) + D*cos(B*x(i-1,1));
    }
    return x;
    }"
    )

    # Function for mapping a point to a colour
    map2color <- function(x, pal, limits = NULL) {
    if (is.null(limits))
    limits = range(x)
    pal[findInterval(x,
    seq(limits[1], limits[2], length.out = length(pal) + 1),
    all.inside = TRUE)]
    }

    # Obtain matrix of points
    cliff_points <- cliff_rcpp(N_points, params[1], params[2], params[3], params[4])

    # Calculate angle between successive points
    cliff_angle <- atan2(
    (cliff_points[, 1] - c(cliff_points[-1, 1], 0)),
    (cliff_points[, 2] - c(cliff_points[-1, 2], 0))
    )

    # Obtain colours for points
    available_cols <-
    viridis(
    1024,
    alpha = point_alpha,
    begin = 0,
    end = 1,
    direction = 1
    )

    cliff_cols <- map2color(
    cliff_angle,
    c(available_cols, rev(available_cols))
    )


    # Output image directly to disk
    jpeg(
    "clifford_attractor.jpg",
    width = output_width,
    height = output_height,
    pointsize = 1,
    bg = "black",
    quality = 100

    )
    plot(
    cliff_points[-1, ],
    bg = "black",
    pch = ".",
    col = cliff_cols
    )

    dev.off()

    最佳答案

    我最近发现了 Scattermore R 的包,它比 R 的标准绘图函数快一个数量级。 scattermoreplot()用颜色和透明度绘制 100m 点需要大约 2 分钟,而 plot()大约需要半小时。

    关于r - 在 R 中高效绘制数亿个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51122970/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com