小编dcl*_*dcl的帖子

有效地绘制R中的数亿个点

plot()在R键曲线100万个左右的数据点的最有效方法是什么?我想画一堆这些Clifford吸引者.这是一个我从一个非常大的图像缩小的例子:

克利福德吸引子

是我用于绘制非常大的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; …
Run Code Online (Sandbox Code Playgroud)

graphics plot r strange-attractor

36
推荐指数
1
解决办法
1270
查看次数

针对具有许多"层"的详细地图优化Shiny + Leaflet性能

我想创建一个Shiny应用程序,其中等值区的着色基于用户可以从中选择的许多可能的定量变量之一的数值.在简单的情况下,这是直截了当的,但是当我们有20多个变量时,我不确定最佳实践,具有非常详细的形状文件(~2300多边形).

变量可能完全相互独立,例如"总人口"或"平均温度"可能相关或不相关,但其中一些变量将具有时间关系,例如3个或更多时间点的"总人口" .

我使用的主要shapefile之一是ABS统计区2.下面我给出澳大利亚的人口密度(总人口/面积)和放大的悉尼视图,以更好地传达我感兴趣的细节水平.

澳大利亚 澳大利亚 悉尼 悉尼

我已将shapefile读入R中,并使用包中的ms_simplify()函数大大降低了复杂性/点数rmapshaper.

现在,就Shiny和传单而言,这就是我一直在做的事情:

  • server定义对象之前server.R,我构建了一个包含所有所需"层"的主要地图对象.也就是说,一个传单,有许多addPolygon()调用来定义每个"层"(组)的颜色.

    # Create main map
    primary_map <- leaflet() %>% 
    addProviderTiles(
        providers$OpenStreetMap.BlackAndWhite,
        options = providerTileOptions(opacity = 0.60)
    ) %>% 
    # Layer 0 (blank)
    addPolygons(
        data = aus_sa2_areas,
        group = "blank"
    ) %>% 
    # Layer 1
    addPolygons(
        data = aus_sa2_areas,
        fillColor = ~palette_layer_1(aus_sa2_areas$var_1),
        smoothFactor = 0.5,
        group = "layer_1"
    ) %>% 
    
    Run Code Online (Sandbox Code Playgroud)

    ...

    # Layer N
    addPolygons(
        data = aus_sa2_areas,
        fillColor …
    Run Code Online (Sandbox Code Playgroud)

gis r shiny choropleth r-leaflet

12
推荐指数
1
解决办法
996
查看次数

将模型公式传递给另一个函数时,找不到对象错误

我有一个奇怪的问题,我似乎无法解决.

我已经尝试编写一个函数,对R中逐步过程选择的模型执行K折交叉验证.(我知道逐步过程的问题,它纯粹用于比较目的):)

现在的问题是,如果我定义函数参数(linmod,k,direction)并运行函数的内容,它可以完美地工作.但是,如果我将它作为一个函数运行,我会收到一条错误,指出无法找到datas.train对象.

我已经尝试使用debug()逐步执行该函数,并且该对象显然存在,但R表示当我实际运行该函数时它不会.如果我只是使用lm()拟合模型,它工作正常,所以我认为这是循环中的step函数的问题,而在函数内部.(尝试注释掉步骤命令,并将预测设置为普通线性模型的预测.)

#CREATE A LINEAR MODEL TO TEST FUNCTION
lm.cars <- lm(mpg~.,data=mtcars,x=TRUE,y=TRUE)


#THE FUNCTION
cv.step <- function(linmod,k=10,direction="both"){
  response <- linmod$y
  dmatrix <- linmod$x
  n <- length(response)
  datas <- linmod$model
  form <- formula(linmod$call)

  # generate indices for cross validation
  rar <- n/k
  xval.idx <- list()
  s <- sample(1:n, n) # permutation of 1:n
  for (i in 1:k) {
    xval.idx[[i]] <- s[(ceiling(rar*(i-1))+1):(ceiling(rar*i))]
  }

  #error calculation
  errors <- R2 <- 0

  for (j in 1:k){
     datas.test <- datas[xval.idx[[j]],]
       datas.train <- datas[-xval.idx[[j]],] …
Run Code Online (Sandbox Code Playgroud)

r formula

10
推荐指数
2
解决办法
2万
查看次数

最简单的方法来绘制R中两个有序列表之间排名的变化?

我想知道是否有一种简单的方法来绘制R中有向二分图形式的2个列表之间元素位置的变化.例如,列表1和2是字符串的向量,不一定包含相同的字符串.内容:

list.1 <- c("a","b","c","d","e","f","g")

list.2 <- c("b","x","e","c","z","d","a")
Run Code Online (Sandbox Code Playgroud)

我想生成类似于:

我追求的那种输出

我在使用igraph包时有轻微的抨击,但不能轻易地构建我想要的东西,我想象并希望不应该太难.

干杯.

plot r graph ranking bipartite

9
推荐指数
3
解决办法
3500
查看次数

使用dygraph在R中复制堆积条形图很困难

我一直在使用dygraphs R软件包来制作一些精彩的时间序列图,但是很难再现这里的例子:http://rstudio.github.io/dygraphs/gallery-custom-plotters.html

我对创建堆积条形图特别感兴趣: 所需的堆积条形图

我的数据是一个xts/zoo对象,并使用标准dygraph函数很好地绘制: 样本图

但是,我不确定该dyStackedBarGroup功能的来源.看来必须创建这些函数,并指向.js文件中的特定绘图仪.

我可以看到第一个例子,如何dyBarChart创建,但在我的本地dygraph安装中没有stackedbarchar.js/stackedbargroup.js(但我可以在https://github.com/rstudio/dygraphs/tree/看到该文件)master/inst/plotters).

我试图从github页面中获取所有函数和.js文件,这些文件在本地加载dygraphs包时似乎不可用,但我仍然不成功.

我做错了什么吗?

r dygraphs r-dygraphs

5
推荐指数
1
解决办法
719
查看次数

在 R/ggplot2 中将字符串转换为函数参数的最佳方法?

我正在开发一个闪亮的应用程序,用户可以在其中选择使用 ggplot2 绘制哪些变量,但是我完全不确定将字符串(要绘制的变量的名称)转换为合适的函数参数的最佳方法。

考虑以下非常人为的工作示例:

df <- data.frame(gp = factor(rep(letters[1:3], each = 10)),
                 y = rnorm(30))

ggplot(df, aes(x = gp, y = y)) +
   geom_point() + facet_wrap(~gp)
Run Code Online (Sandbox Code Playgroud)

现在,如果我只有变量名称的字符串,我将如何告诉 ggplot 在 x 轴上绘制“gp”变量?

我提出了以下内容,但有没有更简单、更传统的方法?请注意我在 aes() 和 facet_wrap() 函数中使用的不同方法。

x.var <- "gp"

ggplot(df, aes(x=lol <- switch(x.var,"gp"=gp), y = y)) +
   geom_point() + facet_wrap(as.formula(paste("~",x.var)))
Run Code Online (Sandbox Code Playgroud)

任何见解都非常感谢!

r ggplot2

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