You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将ggplot2生成的箱线图调整为目标样式的折线图?

解决方案

你当前的折线图效果不佳是因为直接对原始数据使用geom_path,导致每个样本的点都被连线,形成杂乱线条。目标图应展示分组统计趋势(如均值),而非原始数据的连线。以下是调整后的完整方案:

关键调整思路

  1. 先按Risk_Group和剪切速率分组,计算粘度的统计量(以均值为例)
  2. 用汇总后的统计数据绘制折线+圆点,替代原始数据的连线
  3. 移除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 20:14:50