R 如何使用所有CPU内核生成带有ggmap和ggplot2的映射?

R 如何使用所有CPU内核生成带有ggmap和ggplot2的映射?,r,R,我正在使用ggmap和ggplot2生成一张包含680万个不同点(纬度和经度组合)的地图。我成功了,但花了相当长的时间(6个小时) 我注意到R并没有使用我所有的内核,所以我的下一个挑战将是使用我可以使用的所有电源 我该怎么做 我知道“并行”软件包可以做到这一点,但由于我仍在学习R,我不知道如何使用它。 以下是数据示例(来自纽约市开放数据平台): df我认为,由于渲染680万个点的方式不太可能使它们都可见,通常的建议是首先以某种合理的方式聚合数据(内核密度估计、六边形装箱…)。你能提供一些数据给我

我正在使用ggmap和ggplot2生成一张包含680万个不同点(纬度和经度组合)的地图。我成功了,但花了相当长的时间(6个小时)

我注意到R并没有使用我所有的内核,所以我的下一个挑战将是使用我可以使用的所有电源

我该怎么做

我知道“并行”软件包可以做到这一点,但由于我仍在学习R,我不知道如何使用它。 以下是数据示例(来自纽约市开放数据平台):


df我认为,由于渲染680万个点的方式不太可能使它们都可见,通常的建议是首先以某种合理的方式聚合数据(内核密度估计、六边形装箱…)。你能提供一些数据给我们吗?另外,由于R是单线程的,你不太可能使用所有的内核。类似于
parallel
的软件包允许多核使用,但我认为这不适用于图形。缓慢的渲染可能与CPU无关,但更多的是ggplot如何使用GPU资源的问题。请参阅此处的相关链接,除非有办法要求R或ggplot2使用GPU加速,否则这不是一项容易的任务。相反,您应该关注@benbolker建议的一些聚合技术。一般来说,我无法在“合理”的时间内在
ggplot2
中绘制“大型”数据集;我有时使用一些基本R函数来处理中等大小的数据。在其他情况下,进行某种聚合(例如,某个存储桶中的最大值)是有帮助的。你有可能这样做吗?如果随后要放大(即查看较小的数据集)然后你可以提高分辨率。如果有人想用它进行实验,可以在线获取完整的数据。公共可用的<代码>大数据的有趣示例我认为,因为你不太可能以完全可见的方式渲染680万个点,通常的建议是首先以某种合理的方式聚合数据(核密度估计、六边形装箱…)。你能提供一些数据给我们吗?另外,由于R是单线程的,你不太可能使用所有的内核。类似于
parallel
的软件包允许多核使用,但我认为这不适用于图形。缓慢的渲染可能与CPU无关,但更多的是ggplot如何使用GPU资源的问题。请参阅此处的相关链接,除非有办法要求R或ggplot2使用GPU加速,否则这不是一项容易的任务。相反,您应该关注@benbolker建议的一些聚合技术。一般来说,我无法在“合理”的时间内在
ggplot2
中绘制“大型”数据集;我有时使用一些基本R函数来处理中等大小的数据。在其他情况下,进行某种聚合(例如,某个存储桶中的最大值)是有帮助的。你有可能这样做吗?如果有人随后放大(即查看较小的数据集),则可以提高分辨率。如果有人想体验公开的
大数据
df <- structure(list(pickup_datetime = structure(c(19L, 7L, 13L, 10L, 
9L, 9L, 14L, 4L, 16L, 1L, 3L, 12L, 18L, 11L, 2L, 17L, 5L, 15L, 
8L, 6L), .Label = c("01/02/2015 03:40:12 PM", "01/04/2015 01:03:42 AM", 
"01/05/2015 12:22:10 PM", "01/05/2015 12:58:10 PM", "01/06/2015 02:16:47 PM", 
"01/08/2015 12:19:51 PM", "01/09/2015 03:45:22 PM", "01/10/2015 07:15:39 PM", 
"01/11/2015 08:37:20 PM", "01/13/2015 06:57:29 PM", "01/15/2015 03:03:59 AM", 
"01/15/2015 10:55:29 PM", "01/16/2015 10:07:38 PM", "01/21/2015 02:04:33 AM", 
"01/22/2015 04:48:35 PM", "01/23/2015 11:14:52 PM", "01/24/2015 06:35:44 PM", 
"01/25/2015 07:32:09 PM", "01/27/2015 07:30:40 PM"), class = "factor"), 
    Pickup_latitude = c(40.8353157043457, 40.6699333190918, 40.7466583251953, 
    40.7337608337402, 40.8157424926758, 40.8157424926758, 40.7239418029785, 
    40.8073272705078, 40.7512817382812, 40.8260154724121, 40.7934989929199, 
    40.7457313537598, 40.6872291564941, 40.6822357177734, 40.8117980957031, 
    40.7610969543457, 40.7501640319824, 40.7329254150391, 40.7140312194824, 
    40.8164672851562), Pickup_longitude = c(-73.9201583862305, 
    -73.9856719970703, -73.8925704956055, -73.8689346313477, 
    -73.9182586669922, -73.9182586669922, -73.950813293457, -73.9444198608398, 
    -73.9399795532227, -73.9514389038086, -73.9496078491211, 
    -73.9035873413086, -73.990119934082, -73.9935302734375, -73.9296035766602, 
    -73.9349060058594, -73.8618927001953, -73.9548034667969, 
    -73.9550933837891, -73.953971862793)), .Names = c("pickup_datetime", 
"Pickup_latitude", "Pickup_longitude"), row.names = c(NA, 20L
), class = "data.frame")
library(plyr)
pickup <- count(df_sample, c("Pickup_latitude", "Pickup_longitude"))
detach("package:plyr", unload=TRUE)
library(dplyr)
pickup <- filter(pickup, Pickup_latitude != 0 | Pickup_longitude != 0)
library(ggplot2)
library(ggmap)
library(maps)
basemap <- get_map(location=c(lon= -73.8896695, lat= 40.74086), zoom = 11)
longitude = pickup$Pickup_longitude
latitude = pickup$Pickup_latitude
map1 <- ggmap(basemap, extent='panel', base_layer=ggplot(pickup, aes(x=longitude, y=latitude)))
print(map1)
map2 <- map1 + geom_point(color = "blue", size = 0.05)