如何在R中修改图例标签文本及设置图例标题格式?
解决R语言ggplot2图例标签自定义与标题格式调整问题
嘿,我来帮你搞定这两个ggplot2的图例问题!咱们一步步来:
1. 自定义图例标签文本
你提到用scale_color_hue,但你的图是用fill映射分组的,所以应该用scale_fill_discrete(或者scale_fill_hue,效果一致),在这个函数里通过labels参数指定自定义的标签文本就行。比如把"Breakfast"改成"早餐","Dinner"改成"晚餐",你可以换成任何你需要的文本。
2. 调整图例标题的字号与加粗格式
有两种方式可以实现:
- 方式一:在
theme()里设置legend.title参数,用element_text()指定size(字号)和face="bold"(加粗)。 - 方式二:在
guides(fill = guide_legend(...))里添加title.theme参数,同样用element_text()设置格式。
下面是整合了这两个修改的完整代码,我标注了修改的关键部分:
library(dplyr) library(ggplot2) library(forcats) # 加载fct_reorder所属的包,避免潜在警告 dat %>% filter(time %in% c("Breakfast", "Dinner")) %>% droplevels %>% count(time, class) %>% group_by(time) %>% mutate(prop = n/sum(n)) %>% ggplot(aes(x = fct_reorder(class, prop), y = prop, fill = time, label = scales::percent(prop))) + geom_col(position = 'dodge') + geom_text(position = position_dodge(width = 0.9), vjust = 0.5, size = 3) + scale_y_continuous(labels = scales::percent)+ # 自定义图例标签文本:键是原数据值,值是替换后的自定义文本 scale_fill_discrete(labels = c("Breakfast" = "早餐", "Dinner" = "晚餐")) + coord_flip() + theme( legend.position="top", legend.direction="vertical", # 设置图例标题的字号和加粗效果 legend.title = element_text(size = 12, face = "bold") )+ guides(fill = guide_legend(title = "用餐时段", nrow = 1))+ # 这里可直接修改图例标题文本 coord_flip()
代码说明:
scale_fill_discrete(labels = c("原标签" = "新标签", ...)):用键值对替换标签更不容易出错,如果你确定分组顺序固定,也可以直接写labels = c("早餐", "晚餐")。legend.title = element_text(size = 12, face = "bold"):size数值可根据需求调整,face="bold"实现加粗效果。- 你原代码里重复了
coord_flip(),保留一个即可,不影响结果但更简洁。
如果想用第二种方式在guides里设置标题格式,也可以这样写:
guides(fill = guide_legend( title = "用餐时段", nrow = 1, title.theme = element_text(size = 12, face = "bold") ))
两种方式选一种就行,效果完全一致。
内容的提问来源于stack exchange,提问作者Ben10
相关产品推荐
相关产品推荐

