使用 geom_polygon() 保留自定义颜色

Keep customized colors with geom_polygon()

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

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

结果:

(两个错误不要介意)

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

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")

首先,您应该使用 map_data 创建一个格式良好的数据集,用于 ggplot 以及来自图书馆地图的地图。在这种情况下,您的地图上不会有这些白点。
当您根据 map 函数中的多边形顺序定义颜色顺序时,我创建了一个 table 用于与 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) 的网站上,您可以下载法国部门的地图,其中包含该地区的信息。在这种情况下,根据区域名称创建颜色矢量会更容易...