ggplot箱线图修改求助:图例设置与月份轴排序问题
ggplot2箱线图修改方案
1. 调整X轴月份顺序与显示名称
无需修改Excel原始数据,直接在R中将month列转换为有序因子,指定自定义顺序和显示标签即可:
# 加载依赖包(未安装先执行 install.packages(c("ggplot2", "dplyr")) ) library(ggplot2) library(dplyr) # 重新定义月份的顺序与显示名称 summer.months <- summer.months %>% mutate(month = factor(month, levels = c(11, 12, 1, 2, 3, 4), # 强制按指定时间顺序排列 labels = c("十一月", "十二月", "一月", "二月", "三月", "四月"))) # 替换为中文月份名,需英文可改用 c("Nov","Dec","Jan","Feb","Mar","Apr")
2. 图例添加样本量、调整位置与放大
步骤1:统计各分组样本数量
按图例涉及的position和canopy分组,计算每组样本量:
# 统计每个(position, canopy)组合的样本数 sample_counts <- summer.months %>% group_by(position, canopy) %>% summarize(n = n(), .groups = "drop") %>% mutate(label = paste0(position, " (n=", n, ")")) # 生成带样本量的图例标签
步骤2:修改ggplot代码实现需求
将样本量标签整合到图例,同时调整图例位置和尺寸:
ggplot(summer.months, aes(x = month, y = Temp_mean, linetype = position, color = canopy, fill = position)) + geom_boxplot() + theme_bw() + ggtitle("不同林冠下夏季立枯与倒枯的温度变化") + labs(y = "温度值(℃)", x = "月份") + scale_fill_manual(values = c("white", "white", "green", "black"), labels = sample_counts$label) + scale_linetype_discrete(labels = sample_counts$label) + # 调整图例位置与大小 theme( legend.position = "topright", legend.text = element_text(size = 12), legend.title = element_text(size = 14), legend.key.size = unit(1.2, "cm") )
补充说明
- 若图例是
position与canopy的交叉组合,可调整分组统计逻辑,确保每个图例项对应正确样本量; - 多个美学映射(如linetype、fill)的图例标签需保持一致,避免混乱。
内容的提问来源于stack exchange,提问作者user18398113
相关产品推荐
相关产品推荐

