如何将ggplot2生成的箱线图调整为目标样式的折线图?
解决方案
你当前的折线图效果不佳是因为直接对原始数据使用geom_path,导致每个样本的点都被连线,形成杂乱线条。目标图应展示分组统计趋势(如均值),而非原始数据的连线。以下是调整后的完整方案:
关键调整思路
- 先按
Risk_Group和剪切速率分组,计算粘度的统计量(以均值为例) - 用汇总后的统计数据绘制折线+圆点,替代原始数据的连线
- 移除x轴刻度竖线,匹配目标图样式
完整代码
library(tidyverse) library(janitor) # 加载可复现数据(替换你原有的数据导入逻辑) PE <- tibble( Risk_Group = c(0,0,0,0,0,1,1,1,1,1), `TKV (0.6)` = c(7.5,6.8,7.3,7.1,7.4,7.8,7.1,7.6,7.4,7.7), `TKV (0.8)` = c(7.3,6.6,7.1,6.9,7.2,7.6,6.9,7.4,7.2,7.5), `TKV (1)` = c(7.1,6.4,6.9,6.7,7.0,7.4,6.7,7.2,7.0,7.3) ) # 数据重塑(和你原步骤一致) PE_plot5 <- PE %>% pivot_longer(cols = starts_with("TKV"), names_to = "TKV", values_to = "TKV_viscosity") # 按分组计算均值(核心调整:用统计量替代原始数据) summary_data <- PE_plot5 %>% group_by(Risk_Group, TKV) %>% summarise(mean_viscosity = mean(TKV_viscosity), .groups = "drop") %>% mutate(Risk_Group = factor(Risk_Group, labels = c("Low Risk", "High Risk"))) # 绘制目标折线图 ggplot(summary_data, aes(x = TKV, y = mean_viscosity, group = Risk_Group, color = Risk_Group)) + geom_line(size = 1.5, alpha = 0.8) + # 绘制趋势折线 geom_point(size = 4, alpha = 1) + # x轴位置用圆点替代竖线 scale_color_manual(values = c("#4271AE", "#FF5A5F")) + theme_bw() + theme( axis.text.x = element_text(colour = "grey20", size = 12, angle = 45, hjust = 1), axis.text.y = element_text(colour = "grey20", size = 12, vjust = 0.4), axis.title = element_text(size = 14), legend.title = element_blank(), legend.position = "top", legend.text = element_text(size = 12), panel.border = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), axis.ticks.x = element_blank() # 移除x轴刻度竖线 ) + labs(x = "Shear rate (1/s)", y = "Viscosity (cP)") + scale_x_discrete(labels = c("0.6 RPM", "0.8 RPM", "1.0 RPM"))
调整细节说明
- 通过
summary_data计算分组均值,避免原始数据连线导致的混乱 - 用
geom_line绘制清晰的趋势折线,替代原代码中geom_smooth+geom_path的组合 - 添加
geom_point在每个x轴位置绘制圆点,同时设置axis.ticks.x = element_blank()移除竖线 - 简化了包的加载,移除重复加载的冗余包
内容的提问来源于stack exchange,提问作者Muhammed Edib Mokresh
相关产品推荐
相关产品推荐

