R语言ggplot实现单柱状图同时展示城市与年份变量的方法咨询
实现同一城市不同年份颜色深浅区分的柱状图
核心思路
通过interaction(city, year)将城市与年份组合为一个新分类变量作为填充依据,搭配支持层级色彩的调色板,即可实现同一城市下不同年份用深浅差异区分的效果。
步骤1:修正数据处理代码(修复管道符错误)
你提供的代码中管道符%>遗漏了一个%,先修正数据汇总逻辑:
library(tidyverse) # 按城市、年份、月份汇总销售额 dati_sum <- dati %>% group_by(city, year, month) %>% summarise(vendite = sum(sales), .groups = 'drop')
步骤2:绘制目标柱状图
以下提供两种易上手的实现方式,适合初学者:
方法1:用viridis调色板自动生成深浅渐变
viridis系列调色板自带自然的深浅过渡,能自动区分同城市的不同年份:
ggplot(dati_sum, aes(x = month, y = vendite, fill = interaction(city, year))) + geom_col(col = "black", position = "stack") + # 可根据需求改为position = "dodge"实现并列柱状 labs(title = "月度销售分布(按城市+年份区分)", x = "月份", y = "销售额", fill = "城市-年份") + scale_fill_viridis_d(option = "mako", alpha = 0.8) + # mako选项的深浅区分度更明显 theme_classic()
方法2:用RColorBrewer配对调色板
Paired调色板会为同城市的不同年份分配深浅配对的颜色,分组感更强:
ggplot(dati_sum, aes(x = month, y = vendite, fill = interaction(city, year))) + geom_col(col = "black", position = "stack") + labs(title = "月度销售分布(按城市+年份区分)", x = "月份", y = "销售额", fill = "城市-年份") + scale_fill_brewer(palette = "Paired") + theme_classic()
进阶:手动精准控制色彩深浅
如果需要自定义每个城市的基础色及年份对应的深浅度,可借助colorspace包实现:
# 首次使用需安装包 # install.packages("colorspace") library(colorspace) # 定义各城市的基础色 city_base_colors <- c("北京" = "#2E86AB", "上海" = "#F24C4C", "广州" = "#F7B32B") # 为不同年份生成对应深浅的颜色 year_color_shades <- list( "2022" = darken(city_base_colors, amount = 0.2), # 加深20% "2023" = city_base_colors, # 基础色 "2024" = lighten(city_base_colors, amount = 0.2) # 减浅20% ) # 合并为所有城市-年份组合的颜色向量 fill_color_list <- unlist(year_color_shades) ggplot(dati_sum, aes(x = month, y = vendite, fill = interaction(city, year))) + geom_col(col = "black", position = "stack") + labs(title = "月度销售分布(按城市+年份区分)", x = "月份", y = "销售额", fill = "城市-年份") + scale_fill_manual(values = fill_color_list) + theme_classic()
内容的提问来源于stack exchange,提问作者Maria Bragarenco
相关产品推荐
相关产品推荐

