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

R语言箱线图绘制:0/1指标数据与变量分组处理指南

问题解答:箱线图绘制与R变量处理实战

1. 如何使用0和1的指标数据绘制箱线图?

先分两种常见场景给你拆解,新手也能快速上手:

场景A:用0/1作为分组变量,展示连续变量的分布

这是最实用的情况——比如你有个二元标签(比如is_vip,0=非会员,1=会员),想对比两组的消费金额分布,直接用ggplot2就能实现:

# 加载必备绘图包
library(ggplot2)

# 模拟一份测试数据
set.seed(123)
test_data <- data.frame(
  group = sample(c(0,1), 100, replace = TRUE),
  spending = rnorm(100, mean = ifelse(sample(c(0,1),100,replace=T), 800, 400), sd=150)
)

# 绘制箱线图:记得把0/1转成因子,不然R会当成连续值处理
ggplot(test_data, aes(x = factor(group), y = spending)) +
  geom_boxplot(fill = "lightblue") +
  labs(x = "0/1分组", y = "消费金额") +
  theme_minimal()

场景B:直接对0/1本身的数据集绘制箱线图

如果你的数据就是一堆0和1(比如某指标的取值只有这两个),箱线图的统计意义不算强,但也能画出来展示分布:

# 模拟0/1数据集
binary_data <- data.frame(indicator = sample(c(0,1), 200, replace = TRUE, prob = c(0.4, 0.6)))

# 绘制箱线图
ggplot(binary_data, aes(y = indicator)) +
  geom_boxplot(width = 0.2, fill = "coral") +
  labs(y = "0/1指标值") +
  theme_minimal()

2. R新手实战:基于Price绘制箱线图(含变量处理)

针对你的需求,我用新手友好的tidyverse工具链一步步实现,每一步都加了注释:

步骤1:加载所需工具包

library(tidyverse) # 包含数据处理的dplyr和绘图的ggplot2

步骤2:将Storage变量分组为64GB、256GB、other_GB、NA_GB

假设你的原始数据框叫df,不管Storage是数值型还是字符型,都能适配:

df <- df %>%
  mutate(
    # 先统一格式:数值转成带GB的字符,字符型直接用
    storage_raw = ifelse(is.numeric(Storage), paste0(Storage, "GB"), as.character(Storage)),
    # 按规则分组
    storage = case_when(
      storage_raw == "64GB" ~ "64GB",
      storage_raw == "256GB" ~ "256GB",
      !is.na(storage_raw) ~ "other_GB", # 非64/256的都归为other
      TRUE ~ "NA_GB" # 处理所有缺失值
    )
  )

步骤3:解决Price与其他变量的缩放差异问题

如果要在同一张图里展示Price和其他数值差距大的变量(比如评分1-5,Price是几百上千),推荐两种方法:

方法A:标准化变量(所有变量转成均值0、标准差1的统一尺度)

df <- df %>%
  mutate(
    Price_scaled = scale(Price),
    Rating_scaled = scale(Rating) # 假设另一个变量是Rating
  )

# 转成长格式数据,方便分组绘图
df_long <- df %>%
  select(storage, Price_scaled, Rating_scaled) %>%
  pivot_longer(cols = -storage, names_to = "variable", values_to = "scaled_value")

# 绘制标准化后的箱线图
ggplot(df_long, aes(x = storage, y = scaled_value, fill = variable)) +
  geom_boxplot(position = position_dodge(width = 0.8)) +
  labs(x = "存储类别", y = "标准化值", fill = "变量") +
  theme_minimal()

方法B:双Y轴(适合不想改变原始数值的场景)

ggplot(df, aes(x = storage)) +
  geom_boxplot(aes(y = Price), fill = "lightblue", width = 0.3) +
  geom_boxplot(aes(y = Rating * 200), fill = "coral", width = 0.3) + # 把Rating放大到和Price同量级
  scale_y_continuous(
    name = "Price",
    sec.axis = sec_axis(~ . / 200, name = "Rating") # 右侧Y轴转回到原始尺度
  ) +
  theme_minimal()

⚠️ 注意:双Y轴容易误导读者,优先推荐标准化方法。

步骤4:让R识别变量“1”的操作

如果你的变量“1”是字符型(比如取值是"1"),要转成数值用:

# 字符转数值
df$target_var <- as.numeric(df$target_var)

# 如果是因子类型的"1",先转字符再转数值
df$target_var <- as.numeric(as.character(df$target_var))

如果要把“1”作为分组水平,转成因子即可:

df$target_var <- as.factor(df$target_var)

完整整合代码(直接替换成你的数据集就能用)

# 加载包
library(tidyverse)

# 模拟原始数据(替换成你自己的df)
set.seed(456)
df <- data.frame(
  Price = sample(300:1200, 200, replace = TRUE),
  Storage = sample(c(64, 256, 128, 512, NA), 200, replace = TRUE),
  Rating = sample(1:5, 200, replace = TRUE),
  target_var = sample(c("1", "0", "2"), 200, replace = TRUE)
)

# 处理Storage分组和变量"1"
df <- df %>%
  mutate(
    storage_raw = paste0(Storage, "GB"),
    storage = case_when(
      storage_raw == "64GB" ~ "64GB",
      storage_raw == "256GB" ~ "256GB",
      !is.na(storage_raw) ~ "other_GB",
      TRUE ~ "NA_GB"
    ),
    target_var_num = as.numeric(target_var) # 把"1"转成数值
  )

# 绘制最终的Price箱线图
ggplot(df, aes(x = storage, y = Price)) +
  geom_boxplot(fill = "lightgreen") +
  labs(x = "存储容量类别", y = "价格", title = "不同存储容量的价格分布") +
  theme_minimal()

内容的提问来源于stack exchange,提问作者Noah Castle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:33:28