R使用ggplot绘制多数据集条形图时轴标签、配色及图例设置问题
解决方案
你当前的代码存在逻辑问题:多次调用geom_bar未映射分组字段,无法自动生成图例,且geom_bar默认的计数统计逻辑不适合直接展示预计算的唯一用户数。建议先整理统计结果为统一数据框再绘图,可一次性解决所有需求:
1. 预处理绘图数据
先统计三个数据集的唯一用户数,构造绘图专用数据框:
library(tidyverse) plot_data <- data.frame( data_type = c("睡眠数据", "体重记录数据", "日常活动数据"), unique_user = c( n_distinct(sleepDay_merged$Id), n_distinct(weightLogInfo_merged$Id), n_distinct(dailyActivity_merged$Id) ) )
注:如果你使用的
n_unique函数可用,直接替换上述代码中的n_distinct即可,二者功能一致。
2. 完整绘图代码
ggplot(plot_data, aes(x = data_type, y = unique_user, fill = data_type)) + # 用geom_col直接映射y值作为条形高度,无需额外统计 geom_col() + labs( title = "不同数据集的用户覆盖差异", subtitle = "睡眠数据 / 体重记录数据 / 日常活动数据", x = "数据集类型", # 自定义X轴标签 y = "唯一用户数量", # 自定义Y轴标签,需完全隐藏默认count可写为 y = "" fill = "数据集分类" # 自定义图例标题 ) + # 自定义每个条形的颜色,可根据需求替换色值 scale_fill_manual(values = c("#4E79A7", "#F28E2B", "#59A14F"))
对应需求说明
- 去除Y轴默认
count标签:修改labs中的y参数,设为y = ""即可完全隐藏,也可自定义为你需要的业务说明 - 重命名X轴标签:修改
labs中的x参数为你需要的文字即可 - 独立颜色+图例:通过
aes中的fill映射数据集分组字段,ggplot会自动生成图例,scale_fill_manual支持自定义每个条形的颜色
内容的提问来源于stack exchange,提问作者whosane
相关产品推荐
相关产品推荐

