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

dplyr绘制折线图报错is.finite(x),需添加总均值折线

问题与解决方案

需要为折线图添加代表每年所有字母总均值的第四条线,原代码因数据处理和图层映射错误导致添加失败,以下是修正方案:

原代码错误分析

  1. 总均值计算错误:df是按字母和年份聚合后的均值数据,无Numbers列,原代码中mean(Numbers)会报错;同时错误删除了Years列,导致缺失x轴数据。
  2. 图层映射错误:添加总均值线时未指定对应数据框,直接传入整个数据框作为y值,不符合ggplot的映射规则。

修正后的完整代码

library(tidyverse)

# 生成模拟数据
Letters <- rep(c("A","B","C"),20)
Years <- rep(c(1990:1999),6)
Numbers <- runif(60, min = 0, max = 20) 

# 计算单个字母每年的均值
df <- data.frame(Letters, Years, Numbers) %>% 
  group_by(Letters,Years) %>% 
  summarise(Letter_Mean= mean(Numbers), .groups = 'drop')

# 正确计算每年所有字母的总均值
meanallletters <- df %>% 
  group_by(Years) %>% 
  summarise(all_mean = mean(Letter_Mean), .groups = 'drop')

# 绘制折线图并添加总均值线
df %>% 
  ggplot(aes(x=Years, y=Letter_Mean, color = Letters)) +
  geom_line() + 
  geom_point() +
  # 指定总均值数据框,映射y轴并设置样式
  geom_line(data = meanallletters, aes(y = all_mean, color = "所有字母总均值"), 
            linewidth = 1, linetype = "dashed") +
  # 自定义颜色,区分各类别
  scale_color_manual(values = c("A" = "#F8766D", "B" = "#00BA38", "C" = "#619CFF", "所有字母总均值" = "#C77CFF")) +
  labs(title = "字母年度均值与总均值对比", x = "年份", y = "均值", color = "类别")

关键说明

  • 总均值计算基于df中的Letter_Mean列,保留Years作为x轴匹配的关键字段。
  • 添加总均值线时,通过data参数单独指定总均值数据框,避免与主数据的映射冲突。
  • 用固定字符串作为color映射值,配合scale_color_manual自定义颜色和线条样式(如虚线、加粗),让总均值线更易区分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:50:21