【问题标题】:Keep customized colors with geom_polygon()使用 geom_polygon() 保留自定义颜色
【发布时间】:2017-09-01 10:05:59
【问题描述】:

我用map() 绘制了一张带有自定义颜色的法国地图:

map(database="france", fill=TRUE, col=color)

结果:

(不要介意这两个错误)

然后我想使用ggplot2 包将这张地图与兰伯特的投影放在一起:

head(fortify(carte_france))
ggplot(map('france'), aes(long, lat, group = group)) +
  geom_polygon(col = 1) + 
  coord_map(projection = "lambert", parameters = c(lat0 = 41.366005 , lat1 = 51.097523))

但是它给了我这个:

我知道深色来自 geom_polygon() 的 arg fill 但有没有办法告诉函数 geom_polygon() 不使用 arg fill 或保留我之前放置的颜色?

颜色向量,color

c("yellowgreen", "yellowgreen", "yellowgreen", "yellowgreen", 
"gold1", "sienna3", "yellowgreen", "yellowgreen", "sienna3", 
"gold1", "gold1", "gold1", "sienna3", "sienna3", "gold1", "dodgerblue2", 
"dodgerblue2", "dodgerblue2", "gold1", "dodgerblue2", "sienna3", 
"dodgerblue2", "burlywood2", "dodgerblue2", "palevioletred4", 
"dodgerblue2", "palevioletred4", "dodgerblue2", "palevioletred4", 
"palevioletred4", "gold1", "palevioletred4", "gold1", "darkorchid4", 
"gold1", "darkorchid4", "palevioletred4", "green4", "cyan4", 
"gold1", "palevioletred4", "burlywood2", "green4", "green4", 
"cyan4", "darkorchid4", "green4", "burlywood2", "palevioletred4", 
"burlywood2", "green4", "green4", "palevioletred4", "palevioletred4", 
"palevioletred4", "green4", "burlywood2", "olivedrab2", "green4", 
"olivedrab2", "darkorchid4", "darkorchid4", "cyan4", "darkorchid4", 
"cyan4", "cyan4", "olivedrab2", "olivedrab2", "olivedrab2", "cyan4", 
"cyan4", "olivedrab2", "cyan4", "olivedrab2", "olivedrab2", "cyan4", 
"cyan4", "olivedrab2", "olivedrab2", "olivedrab2", "cyan4", "cyan4", 
"cyan4", "cyan4", "orange2", "orangered1", "orangered1", "orangered1", 
"olivedrab2", "orange2", "olivedrab2", "orangered1", "orange2", 
"orangered1", "orange2", "orange2", "orangered1", "orangered1", 
"orangered1", "orange2", "orangered1", "orange2", "orangered1", 
"olivedrab2", "orangered1", "orangered1", "orangered1", "orangered1", 
"orange2", "orange2", "orange2", "chartreuse3", "orangered1", 
"chartreuse3")

【问题讨论】:

    标签: r ggplot2 maps polygon


    【解决方案1】:

    首先,您应该使用 map_data 为 ggplot 创建一个格式良好的数据集,其中包含来自图书馆地图的地图。在这种情况下,您的地图上不会出现这些白点。
    当您根据map 函数中的多边形顺序定义颜色顺序时,我创建了一个与map_data 左连接的表格。

    # Get polygon order from map
    map_france <- map(database="france", fill=TRUE)
    
    # Create a dataframe with department and corresponding colors
    names_col <- data.frame(
      region = map_france$names,
      col_dpt = c("yellowgreen", "yellowgreen", "yellowgreen", "yellowgreen", 
                  "gold1", "sienna3", "yellowgreen", "yellowgreen", "sienna3", 
                  "gold1", "gold1", "gold1", "sienna3", "sienna3", "gold1", "dodgerblue2", 
                  "dodgerblue2", "dodgerblue2", "gold1", "dodgerblue2", "sienna3", 
                  "dodgerblue2", "burlywood2", "dodgerblue2", "palevioletred4", 
                  "dodgerblue2", "palevioletred4", "dodgerblue2", "palevioletred4", 
                  "palevioletred4", "gold1", "palevioletred4", "gold1", "darkorchid4", 
                  "gold1", "darkorchid4", "palevioletred4", "green4", "cyan4", 
                  "gold1", "palevioletred4", "burlywood2", "green4", "green4", 
                  "cyan4", "darkorchid4", "green4", "burlywood2", "palevioletred4", 
                  "burlywood2", "green4", "green4", "palevioletred4", "palevioletred4", 
                  "palevioletred4", "green4", "burlywood2", "olivedrab2", "green4", 
                  "olivedrab2", "darkorchid4", "darkorchid4", "cyan4", "darkorchid4", 
                  "cyan4", "cyan4", "olivedrab2", "olivedrab2", "olivedrab2", "cyan4", 
                  "cyan4", "olivedrab2", "cyan4", "olivedrab2", "olivedrab2", "cyan4", 
                  "cyan4", "olivedrab2", "olivedrab2", "olivedrab2", "cyan4", "cyan4", 
                  "cyan4", "cyan4", "orange2", "orangered1", "orangered1", "orangered1", 
                  "olivedrab2", "orange2", "olivedrab2", "orangered1", "orange2", 
                  "orangered1", "orange2", "orange2", "orangered1", "orangered1", 
                  "orangered1", "orange2", "orangered1", "orange2", "orangered1", 
                  "olivedrab2", "orangered1", "orangered1", "orangered1", "orangered1", 
                  "orange2", "orange2", "orange2", "chartreuse3", "orangered1", 
                  "chartreuse3")
    )
    

    然后你可以将这个数据框加入到map_data创建的数据中,并用ggplot调用颜色向量。

    # Get the map in the correct format for ggplot
    # And join the correspondance of colors
    carte_france <- map_data('france') %>%
      left_join(names_col)
    
    # Plot
    ggplot(carte_france, aes(long, lat, group = group)) +
      geom_polygon(col = 1, fill = carte_france$col_dpt) + 
      coord_map(projection = "lambert", 
                parameters = c(lat0 = 41.366005 , lat1 = 51.097523))
    

    为了您的信息,您可以在 IGN 网站 (http://professionnels.ign.fr/geofla) 上下载法国部门的地图,以及该地区的信息。在这种情况下,根据区域名称创建颜色矢量会更容易...

    【讨论】:

    • 是的,我在 10 分钟前找到了答案,我也做了同样的事情,但 IGN 的问题是他们只为部门提供质心,因此我无法定位我的积分只有纬度和经度,因为用于绘图的坐标不同。
    • 您可以使用sp::spTransform 重新投影 IGN shapefile 或您的点。但这与这个问题的主题不同......
    • 感谢您的提示,我会检查是否可以使用此功能获得经纬度投影。
    猜你喜欢
    • 2018-04-03
    • 1970-01-01
    • 2020-12-26
    • 2017-12-05
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    相关资源
    最近更新 更多