R ggplot2 geom_bar柱状图调整X轴文本、移除冗余图例方法
故障原因
- X轴标签旋转不生效:代码中
ggtitle()行末尾缺失+图层连接符,后续的theme()配置没有被挂载到ggplot对象上,所有主题自定义设置均未执行。 - 冗余图例无法删除:一方面theme层未加载导致相关配置失效,另一方面你写的
legend.key = NULL本身就不是移除图例的有效参数;另外单系列柱状图将fill映射为和X轴完全一致的分类变量,本身就会生成和X轴标签重复的无效图例。 - 冗余代码:全局环境中给
Spécialité和Nombre de praticiens en 2021单独赋值的两行代码没有实际作用,ggplot会直接调用传入数据框的列,不需要提前单独赋值。
修正代码
提供两种可选实现:
- 不需要按专科区分填充色时,直接取消fill的美学映射,从根源避免冗余图例生成
library(ggplot2) library(dplyr) ggplot(Evol_praticiens_spé_amb, aes(x = Spécialité, y = `Nombre de praticiens en 2021`)) + geom_bar(stat = "identity", fill = "#2c7fb8", width = 0.7) + ggtitle("Repartition des praticiens en ambulatoire en 2021") + theme( plot.title = element_text(hjust = 0.5, vjust = 1, size = 10), # 90度旋转标签时hjust设为1,让文字顶端对齐刻度,避免错位 axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5, size = 5), axis.text.y = element_text(size = 5) )
- 需要保留不同专科的填充色区分时,保留fill映射,通过参数直接隐藏对应图例
library(ggplot2) library(dplyr) ggplot(Evol_praticiens_spé_amb, aes(x = Spécialité, y = `Nombre de praticiens en 2021`, fill = as.factor(Spécialité))) + geom_bar(stat = "identity", width = 0.7) + ggtitle("Repartition des praticiens en ambulatoire en 2021") + # 隐藏fill映射生成的图例 guides(fill = "none") + theme( plot.title = element_text(hjust = 0.5, vjust = 1, size = 10), axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5, size = 5), axis.text.y = element_text(size = 5) )
注:如果觉得90度垂直标签阅读体验差,可以把
angle参数改为45,配合hjust=1实现斜排标签,可读性更好。
内容的提问来源于stack exchange,提问作者user19304348
相关产品推荐
相关产品推荐

