varias superponer studio modificar lineas graficos graficas ggplot ejes r plot graphics strange-attractor

studio - superponer graficas en r ggplot



Trazar eficientemente cientos de millones de puntos en R (1)

¿Es plot() la forma más eficiente de trazar 100 millones de puntos de datos en R? Me gustaría trazar un montón de estos Clifford Attractors . Aquí hay un ejemplo de uno que he bajado de una imagen muy grande:

Here hay un enlace a un código que he usado para trazar imágenes muy grandes de 8K (7680x4320).

No toma mucho tiempo generar 50 o 100 millones de puntos (usando Rcpp), ni obtener el valor hexadecimal para el color + transparencia, pero el trazado y el almacenamiento reales en el disco son extremadamente lentos.

  • ¿Hay una forma más rápida de trazar (y guardar) todos estos puntos?
  • ¿Es R una herramienta mala para este trabajo?
  • ¿Qué herramientas utilizarías para trazar miles de millones de puntos, incluso si no pudieras encajarlos todos en ram?
  • ¿Cómo se habría hecho una trama de muy alta resolución de este tipo (color + transparencia) con el software y hardware de 1990?

Edición: código utilizado

# 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()