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

R语言基于多列年度汇总数据绘制均值与最大值折线图

可复现实现方案

整个流程基于R的tidyverse生态实现,代码可直接运行复现结果。

1. 环境准备

首次运行需先安装依赖包,后续直接加载即可,依赖包含数据整形、统计计算、绘图全流程所需工具:

# 首次运行请先执行安装命令
# install.packages("tidyverse")
library(tidyverse)

2. 加载数据

直接使用提供的模拟数据集作为输入:

house_id = c("id1", "id2", "id3", "id4", "id5", "id6")
value_2016 = c(1000, 1002, 2000, 20004, 1000, 9000)
value_2017 = c(2000, 2402, 1400, 30004, 2000, 12000)
value_2018 = c(4000, 3200, 600, 40004, 3000, 15000)
df = data.frame(house_id, value_2016, value_2017, value_2018)

如果使用真实数据集realact,只需要把后续代码中匹配列的规则替换为starts_with("tot_appr_val_")、年份提取规则替换为移除tot_appr_val_前缀即可,逻辑完全通用。

3. 数据整形与统计量计算

原始数据为宽表格式(每年价值单独占一列),需要先转换为适合统计、绘图的长表格式,再按年份分组计算所需的均值、最大值,计算时自动剔除NA值,适配原数据中的缺失值情况:

year_stat <- df %>%
  # 宽表转长表,拆分出年份和评估价值列
  pivot_longer(
    cols = starts_with("value_"), 
    names_to = "year",
    values_to = "appr_value",
    names_transform = ~as.numeric(str_remove(., "value_")) 
  ) %>%
  # 按年份分组计算统计量
  group_by(year) %>%
  summarise(
    均值 = mean(appr_value, na.rm = TRUE),
    最大值 = max(appr_value, na.rm = TRUE),
    .groups = "drop"
  )

运行后直接查看year_stat即可得到各年份对应的均值、最大值结果,和summary函数输出的统计值完全一致。

4. 绘制折线图

从提供的summary结果看,房屋评估价值的最大值(十亿级)和均值(数十万级)量级差异极大,单Y轴会导致均值折线被压缩到几乎贴在X轴无法辨识,这里提供两种常用展示方案:

方案1:双Y轴折线图(适配两个指标的不同量级)

左轴对应均值刻度,右轴对应最大值刻度,两条折线用不同颜色区分:

ggplot(year_stat, aes(x = year)) +
  # 均值折线,绑定左Y轴
  geom_line(aes(y = 均值, color = "年均值"), linewidth = 1.2) +
  geom_point(aes(y = 均值, color = "年均值"), size = 3) +
  # 最大值折线,绑定右Y轴,按量级比例做缩放适配
  geom_line(aes(y = 最大值 / (max(最大值)/max(均值)), color = "年最大值"), linewidth = 1.2) +
  geom_point(aes(y = 最大值 / (max(最大值)/max(均值)), color = "年最大值"), size = 3) +
  # 双Y轴刻度设置
  scale_y_continuous(
    name = "评估价值均值",
    sec.axis = sec_axis(~ . * (max(year_stat$最大值)/max(year_stat$均值)), name = "评估价值最大值")
  ) +
  # X轴年份刻度
  scale_x_continuous(breaks = c(2016, 2017, 2018)) +
  # 颜色与图例设置
  scale_color_manual(values = c("年均值" = "#2c7bb6", "年最大值" = "#d7191c")) +
  labs(x = "年份", color = "统计指标", title = "2016-2018年房屋评估价值变化趋势") +
  theme_bw() +
  theme(
    axis.title.y.left = element_text(color = "#2c7bb6"),
    axis.title.y.right = element_text(color = "#d7191c"),
    legend.position = "bottom"
  )

方案2:对数坐标轴折线图(避免双Y轴的统计误导问题)

如果不希望使用双Y轴,可以直接对Y轴取10为底的对数,两个量级的指标可以在同一坐标轴下清晰展示变化趋势:

ggplot(year_stat, aes(x = year)) +
  geom_line(aes(y = 均值, color = "年均值"), linewidth = 1.2) +
  geom_point(aes(y = 均值, color = "年均值"), size = 3) +
  geom_line(aes(y = 最大值, color = "年最大值"), linewidth = 1.2) +
  geom_point(aes(y = 最大值, color = "年最大值"), size = 3) +
  scale_y_log10(name = "评估价值(对数10刻度)") +
  scale_x_continuous(breaks = c(2016, 2017, 2018)) +
  scale_color_manual(values = c("年均值" = "#2c7bb6", "年最大值" = "#d7191c")) +
  labs(x = "年份", color = "统计指标", title = "2016-2018年房屋评估价值变化趋势") +
  theme_bw() +
  theme(legend.position = "bottom")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:27:36