使用R语言ggplot2绘制连接模型LCL与UCL的X1、X2分组图表
R语言实现方案(基于ggplot2)
步骤1:加载依赖包与导入数据集
# 加载需要的包 library(tidyverse) # 导入你提供的数据集 mydata <- structure(list(x1m1 = c(0.5, 1), x1m2 = c(0.2, 1.5), x1m3 = c(0.5, 1.25), x2m1 = c(0.24, 0.98), x2m2 = c(0.1, 1.4), x2m3 = c(1, 2)), class = "data.frame", row.names = c("LCL", "UCL"))
步骤2:数据格式转换(宽表转长表,适配绘图需求)
原有数据集为宽格式,需先转换为适配ggplot2绘图的长格式,同时拆分出指标分组(X1/X2)和模型编号:
df_long <- mydata %>% rownames_to_column("limit_type") %>% pivot_longer(cols = -limit_type, names_to = "group_model", values_to = "value") %>% # 拆分列名提取X分组和模型编号 separate(group_model, into = c("x_group", "model"), sep = 2) %>% # 转为因子固定展示顺序 mutate(x_group = factor(x_group, levels = c("x1", "x2"), labels = c("X1", "X2")), model = factor(model, levels = c("m1", "m2", "m3"), labels = c("模型1", "模型2", "模型3")))
步骤3:绘制目标图表
可以选择分面同时输出X1、X2的图表,也可以单独筛选分组输出单个图表:
# 分面同时输出X1、X2的结果 ggplot(df_long, aes(x = model, y = value)) + # 连接每个模型的LCL和UCL竖线 geom_line(aes(group = model), linewidth = 1) + # 标记LCL和UCL的端点 geom_point(aes(color = limit_type), size = 3) + # 按X1/X2分面展示 facet_wrap(~x_group, scales = "free_y") + # 调整坐标轴和图例说明 labs(x = "模型", y = "数值", color = "限值类型") + theme_bw()
如果需要单独输出X1或者X2的图表,只需要在绘图前增加筛选条件即可,比如仅绘制X1的图表:
df_long %>% filter(x_group == "X1") %>% ggplot(aes(x = model, y = value)) + geom_line(aes(group = model), linewidth = 1) + geom_point(aes(color = limit_type), size = 3) + labs(x = "模型", y = "数值", color = "限值类型") + theme_bw()
调整说明
如果需要修改配色、线条粗细、点大小等样式,直接调整geom_line和geom_point的对应参数即可。
内容的提问来源于stack exchange,提问作者MNU
相关产品推荐
相关产品推荐

