为R语言gganimate生成的ggplot动图添加大洲对应颜色图例
ggplot2+gganimate动画添加大洲颜色图例的解决方案
问题原因
你当前代码无法生成大洲图例的核心原因是颜色美学colour映射到了country字段,开启图例后默认会生成所有国家的图例条目,和你需要的大洲维度不匹配。
修正后完整代码
首先修正安装包的语法错误(多包安装需要把包名放在c()内):
install.packages(c('gapminder', 'ggplot2', 'gganimate', 'gifski'))
绘图代码:
library(gapminder) library(ggplot2) library(gganimate) library(gifski) library(dplyr) # 构造大洲和对应色系的映射表,沿用gapminder自带的国家配色逻辑 continent_color <- gapminder %>% distinct(continent, country) %>% group_by(continent) %>% slice(1) %>% ungroup() %>% mutate(color = country_colors[country]) %>% select(continent, color) %>% tibble::deframe() p5 <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, colour = country)) + # 原有图层保留,不生成图例,维持原有点色效果 geom_point(alpha = 0.7, show.legend = FALSE) + # 新增透明图层,仅用来生成大洲维度的颜色图例 geom_point(aes(color = continent), alpha = 0) + scale_colour_manual( # 合并国家、大洲两套颜色映射 values = c(country_colors, continent_color), # 仅在图例中展示大洲条目 breaks = names(continent_color) ) + # 不需要人口大小图例可保留guide = "none",需要则删掉该参数 scale_size(range = c(2, 12), guide = "none") + scale_x_log10() + labs( title = 'Year: {frame_time}', x = 'GDP per capita', y = 'Life expectancy', color = "大洲" ) + transition_time(year) + ease_aes('linear') animate(p5) anim_save('plot.gif')
代码修改说明
- 新增的
geom_point(aes(color = continent), alpha = 0)图层完全透明,不会覆盖原有散点的显示效果,仅作为图例生成的映射依据 scale_colour_manual通过breaks参数过滤了国家维度的图例条目,仅保留大洲对应的图例项- 完全沿用了gapminder自带的
country_colors配色逻辑,和你原来的动画颜色效果完全一致
内容的提问来源于stack exchange,提问作者Hansika Sachdeva
相关产品推荐
相关产品推荐

