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

如何用R绘制含区间与数值列的数据框水平分面图?

解决方案

1. 数据预处理

首先需要拆分y列的数值与区间信息,再把数据转换成适合分面绘图的长格式:

# 加载所需工具包
library(tidyverse)

# 导入你的数据
df <- structure(list(w = c("A", "B", "C", "D"), 
                     x = c(204L, 225L, 304L, 318L), y = c("250.600972895687", 
                                                         "135.212187604404", "[432,471]", "[463,479]"), z = c(43.4955443375464, 
                                                                                                             51.1172712956558, 70.8041394323353, 73.2068258760318)), row.names = 4:7, class = "data.frame")

# 处理y列,拆分数值与区间
df_processed <- df %>%
  mutate(
    # 标记是否为区间格式
    is_interval = str_detect(y, "\\["),
    # 提取非区间的单个数值
    y_value = ifelse(!is_interval, as.numeric(y), NA),
    # 提取区间下限
    y_low = ifelse(is_interval, str_extract(y, "(?<=\\[)\\d+") %>% as.numeric(), NA),
    # 提取区间上限
    y_high = ifelse(is_interval, str_extract(y, "\\d+(?=\\])") %>% as.numeric(), NA)
  ) %>%
  # 将x、z列转为长格式,适配分面需求
  pivot_longer(cols = c(x, z), names_to = "variable", values_to = "value") %>%
  # 补充y分面的行数据,统一结构
  mutate(
    variable = factor(variable, levels = c("x", "y", "z")),
    value = ifelse(variable == "y", y_value, value)
  )

2. 绘制分面图

用ggplot2实现水平分面,y列分面同时展示数值点和区间条形:

ggplot() +
  # 绘制x、z分面的数值点
  geom_point(data = df_processed %>% filter(variable != "y"),
             aes(x = w, y = value), size = 3) +
  # 绘制y分面的单个数值点(标红区分)
  geom_point(data = df_processed %>% filter(variable == "y", !is.na(value)),
             aes(x = w, y = value), size = 3, color = "red") +
  # 绘制y分面的区间条形
  geom_linerange(data = df_processed %>% filter(variable == "y", is_interval),
                 aes(x = w, ymin = y_low, ymax = y_high), size = 5, alpha = 0.5) +
  # 垂直排列分面,每个分面y轴独立缩放
  facet_wrap(~variable, ncol = 1, scales = "free_y") +
  # 调整主题样式
  theme_bw() +
  labs(x = "w", y = "数值")

代码说明

  • 预处理阶段:通过正则表达式识别区间格式,拆分出上下限;将x、z列转为长格式,保证数据结构适配分面绘图。
  • 绘图阶段:分别处理不同分面的元素,facet_wrap实现垂直分面布局,scales="free_y"让每个分面的y轴根据数据范围自动调整。

内容的提问来源于stack exchange,提问作者Lucas Peres

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:42:54