Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 创建具有调整大小的州的地图_R_Ggplot2_Shapefile_Geo_Matplotlib Basemap - Fatal编程技术网

R 创建具有调整大小的州的地图

R 创建具有调整大小的州的地图,r,ggplot2,shapefile,geo,matplotlib-basemap,R,Ggplot2,Shapefile,Geo,Matplotlib Basemap,嗨,视觉爱好者们 我正在尝试创建一个彩色地图,如下所示: (来源:) 但是我希望这个贴图是有偏差的,这样状态的面积与我提供的值成比例(特别是,我使用GPD值)。 我的意思是,我希望有些州看起来更大,有些州看起来更小,它们实际上是,但尽可能多地提醒真实的美国地图。 状态移动或形状破坏没有问题 有什么想法吗?有现成的解决方案吗? 目前我使用R和albersusa软件包,因为这是我熟悉的东西。开放改变! 我当前的绘图代码是: gmap<- ggplot

嗨,视觉爱好者们

我正在尝试创建一个彩色地图,如下所示: (来源:)

但是我希望这个贴图是有偏差的,这样状态的面积与我提供的值成比例(特别是,我使用GPD值)。 我的意思是,我希望有些州看起来更大,有些州看起来更小,它们实际上是,但尽可能多地提醒真实的美国地图。 状态移动或形状破坏没有问题

有什么想法吗?有现成的解决方案吗? 目前我使用R和albersusa软件包,因为这是我熟悉的东西。开放改变! 我当前的绘图代码是:

           gmap<-
           ggplot() +
           geom_map(data = counties@data, map = cmap,
                     aes(fill =atan(y/x),alpha=x+y, map_id = name),
                     color = "gray50") +
            geom_map(data = smap, map = smap,
                     aes(x = long, y = lat, map_id = id),
                     color = "black", size = .5, fill = NA) +
            theme_map(base_size = 12) +
            theme(plot.title=element_text(size = 16, face="bold",margin=margin(b=10))) +
            theme(plot.subtitle=element_text(size = 14, margin=margin(b=-20))) +
            theme(plot.caption=element_text(size = 9, margin=margin(t=-15),hjust=0)) +
scale_fill_viridis()+guides(alpha=F,fill=F)

gmap这里有一个非常难看的第一次尝试,使用
maps
软件包中的大纲和
dplyr
中的一些数据操作

library(maps)
library(dplyr)
library(ggplot2)

# Generate the base outlines
mapbase <- map_data("state.vbm")    

# Load the centroids
data(state.vbm.center)

# Coerce the list to a dataframe, then add in state names
# Then generate some random value (or your variable of interest, like population)
# Then rescale that value to the range 0.25 to 0.95

df <- state.vbm.center %>% as.data.frame() %>% 
  mutate(region = unique(mapbase$region),
         somevalue = rnorm(50),
         scaling = scales::rescale(somevalue, to = c(0.25, 0.95)))
df 

# Join your centers and data to the full state outlines
df2 <- df %>% 
  full_join(mapbase) 
df2

# Within each state, scale the long and lat points to be closer
#   to the centroid by the scaling factor

df3 <- df2 %>% 
  group_by(region) %>% 
  mutate(longscale = scaling*(long - x) + x,
         latscale = scaling*(lat - y) + y) 
df3


这些轮廓不是最好的,它们收缩到的质心位置有时会导致多边形与原始状态轮廓重叠。但这只是一个开始;您可以为美国各州和各种形心算法找到更好的形状。

您可以尝试制作一个卡通图吗?看见
# Plot both the outlines for reference and the rescaled polygons

  ggplot(df3, aes(long, lat, group = region, fill = somevalue)) + 
  geom_path() +
  geom_polygon(aes(longscale, latscale)) +
  coord_fixed() + 
  theme_void() + 
  scale_fill_viridis()