2

我正在尝试基于美国地图创建一个 stl 文件,该地图具有不同的位置,如点,基于数据值的不同高度。

我可以相对容易地创建点部分。

library(ggplot2)
library(data.table)
library(rayshader)

myPoints <- structure(list(N = c(7.34e+20, 1e+18, 1.471e+21, 1.35e+21, 2.096e+21
), latitude = c(35.060137, 42.151816, 34.420986, 39.713209, 32.445652
), longitude = c(-93.133718, -71.77203, -92.530547, -75.661478, 
                 -93.739031)), row.names = c(NA, -5L), 
class = c("data.table",  "data.frame"), .internal.selfref = <pointer: 0x0000000006431ef0>)


gg1 <- ggplot() +
       geom_map(data = us, map = us, aes(x = long, y = lat, map_id = region),
                fill = "#ffffff", color = "#ffffff", size = 0.15) + 
       geom_point(data = test, aes(x = longitude, y = latitude, color = N), inherit.aes = F) +
       theme(legend.position = "none")

gg1

plot_gg(gg1, multicore = TRUE, width = 5, height = 5, scale = 250, windowsize = c(1400,866),
        zoom = 0.55, phi = 30)

但是,当我使用光线着色器保存到 stl 时,美国部分是平坦的。

在此处输入图像描述

换句话说,它基本上是一个带有一些尖刺的平坦表面。所以我想我会尝试在此处添加一些州级数据,这将为美国部分增加一些海拔。

但发生的情况是,美国部分的升高抹去了点数据。

us <- map_data("state")

arr <- USArrests %>% 
       rownames_to_column("region") %>% 
       mutate(region = tolower(region))

arr$Murder <- 0.01


gg2 <- ggplot() +
       geom_map(data = us, map = us, aes(x = long, y = lat, map_id = region),
                fill = "#ffffff", color = "#ffffff", size = 0.15) + 
       geom_map(data = arr, map = us, aes(fill = Murder, map_id = region), color = "#ffffff") + 
       geom_point(data = test, aes(x = longitude, y = latitude, color = N), inherit.aes = F) +
       theme(legend.position = "none")

gg2

plot_gg(gg2, multicore = TRUE, width = 5, height = 5, scale = 250, windowsize = c(1400,866),
        zoom = 0.55, phi = 30)

在此处输入图像描述

最终我想要的是美国部分略微升高,然后我的点数据高于此。我尝试将点数加倍以使其变大等,但我无法得到它。

我想知道是否需要放弃rayshader ggplot函数,并尝试使用矩阵,但我仍在学习使用空间数据我不知道将美国地图数据转换为矩阵并正确标记的好方法所述矩阵上的点。

我愿意接受任何和所有建议。

4

1 回答 1

0

我花了一些时间来学习这个很酷的软件包,因为直到我看到这个问题我才知道它。据我从目前的 CRAN 手册(版本 0.13.2)中了解,我认为您无法生成您所要求的图形。在 CRAN 手册(第 15 页)中,您会看到有一个名为height_aes.

默认“空”。'fill' 或 'color' 美学是否应该用于高度值,用户可以通过将 'fill' 或 'color' 传递给此参数来指定。自动检测。如果同时存在“填充”和“颜色”美学,则默认为“填充”。

如您所见,您可以使用 EITHERfillcolor在图形中创建高度。默认情况下,plot_gg()选择fill高度。因此,您看到多边形在升高,而点则没有。目前,我认为您在制作图形时必须选择其中一种美学。让我们拭目以待,看看我们是否能够同时制作多边形和条形 3D。

于 2020-01-05T06:27:57.553 回答