Eriza
Eriza

Reputation: 45

Add color on height 3D map with Rayshader in R

I want to make 3D map with rayshader. I have seen this web https://www.tylermw.com/3d-ggplots-with-rayshader/ and try the code with my data. In this web, height map has black color but not on my output. Are there any way to get result like that? Thanks..

I use this code.

map <- sf::st_read('map/map.shp', quiet = TRUE)
gg = ggplot(map) +
   geom_sf(aes(fill =AREA),linewidth=0.7,colour='black',inherit.aes=FALSE) +
    scale_fill_viridis('Area',na.value = 'white')+
   theme(axis.line = element_blank(),axis.title = element_blank(),
         axis.ticks = element_blank(), axis.text = element_blank())
plot_gg(gg, multicore = TRUE, width = 6 ,height=2.7, fov = 70,offset_edges = TRUE)

This is snapshot my result. my output

This is my expect. my expect

Upvotes: 2

Views: 891

Answers (2)

Zhiqiang Wang
Zhiqiang Wang

Reputation: 6769

Obviously, you are using new version of ggplot2 3.4.0. I think your issue is not about adding color but more likely to do with newer version of ggplot2, specifically new linewidth(). Your color is still correct as black but thinner. This has been documented https://ggplot2.tidyverse.org/news/index.html.

I have also experienced some strange behaviors with ggplot2 3.4.0 and rayshader. As you can see in the following graph, my 3D graph with ggplot2 3.4.0 became unrecognizable.

rayshader with ggplot 3.4.0

enter image description here

The only solution I have so far is to switch back to ggplot2 3.3.6.

library(remotes)
install_version("ggplot2", version = "3.3.6", repos = "http://cran.us.r-project.org")

You may want to try it, as least as a temporary solution.

rayshader with ggplot 3.3.6

enter image description here

Upvotes: 3

Jindra Lacko
Jindra Lacko

Reputation: 8749

Are you absolutely positively certain you are using the current versions of packages? If yes then it could be some tricky environmental issue (I run my R on Linux).

When I run your code I get this - I changed the edges color from black to red to exaggerate the effect; otherwise it is your code, and it seems to behave itself.

library(sf)
library(ggplot2)
library(rayshader)

map <- st_read(system.file("shape/nc.shp", package="sf")) # to make reproducible

gg <- ggplot(map) +
  geom_sf(aes(fill = AREA),
          linewidth=0.7,
          colour='red', # changed from black to red to exaggerate...
          inherit.aes=FALSE) +
  viridis::scale_fill_viridis('Area',na.value = 'white')+
  theme(axis.line = element_blank(),
        axis.title = element_blank(),
        axis.ticks = element_blank(), 
        axis.text = element_blank())

plot_gg(gg,
        multicore = TRUE, 
        width = 6,
        height=2.7, 
        fov = 70,
        offset_edges = TRUE)

render_snapshot(filename = "nc.png")

enter image description here

Upvotes: 0

Related Questions