如何在R语言中复现图表下方含年龄最值与中位数的数值线
问题
我想要复现的数值线包含幼龟(juveniles)、雌性(females)和雄性(males)年龄的最小值(min)、中位数(median)和最大值(max)。现有绘图代码如下:
original_plot <- ggplot(turtle2011, aes(x = Zage1, y = Agglut, shape = Sex)) + geom_point() + geom_smooth(method = "lm", se = FALSE, color = "red") + # 添加回归线 labs(x = "Zage", y = "天然抗体") + # 设置坐标轴标签 scale_shape_manual(values = c(1, 17, 15)) + # 自定义各性别对应的形状 theme_minimal() # 设置绘图主题
请问如何基于此在R语言中复现图表下方的该数值线?
解决方案
要在现有ggplot2图表下方添加展示不同性别群体年龄统计值的数值线,按以下步骤操作即可:
第一步:计算分组统计数据
先从原数据框turtle2011中按Sex分组,提取每组年龄(Zage1)的min、median、max:library(dplyr) age_stats <- turtle2011 %>% group_by(Sex) %>% summarize( min_age = min(Zage1, na.rm = TRUE), median_age = median(Zage1, na.rm = TRUE), max_age = max(Zage1, na.rm = TRUE) )若
Sex列的类别名称不是"juveniles"/"females"/"males",需先统一名称;顺序不对的话,用factor调整:age_stats$Sex <- factor(age_stats$Sex, levels = c("juveniles", "females", "males"))第二步:绘制数值线子图
单独绘制展示统计值的数值线,用线段连接min和max,用点标记三个统计值:stats_plot <- ggplot(age_stats, aes(x = min_age, xend = max_age, y = Sex, yend = Sex)) + geom_segment(size = 1) + # 绘制min到max的横线 geom_point(aes(x = min_age), shape = 19, size = 3) + # 标记最小值 geom_point(aes(x = median_age), shape = 18, size = 4, color = "red") + # 红色标记中位数 geom_point(aes(x = max_age), shape = 19, size = 3) + # 标记最大值 labs(x = "Zage", y = "") + theme_minimal() + theme( axis.text.y = element_blank(), axis.title.y = element_blank(), plot.margin = margin(t = -10, r = 0, b = 0, l = 0) # 缩小上边距,让子图和主图贴合 )第三步:拼接主图和子图
使用patchwork包将两张图垂直拼接,调整高度比例让布局更协调:library(patchwork) combined_plot <- original_plot / stats_plot + plot_layout(heights = c(4, 1)) print(combined_plot)
这样就能得到主图下方带有目标数值线的完整图表。
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

