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

ggplot绘制数值均值折线图报错:均值计算提示非数值类型

嗨,我来帮你排查一下问题所在~

问题根源分析

你的代码里有两个关键错误导致了警告和无法生成正确的折线图:

  • 错误1:传入字符串给mean()
    你写的mean("hornsgatan")是让R对文本字符串"hornsgatan"计算均值,这显然不是数值类型,所以R返回NA,这就是警告里提示“参数不是数值或逻辑型”的原因。正确的做法是直接引用列名,不要加引号。
  • 错误2:aes()内的逻辑错误
    就算去掉引号,mean(hornsgatan)放在aes()里也不符合需求——ggplot默认逐行处理数据,这样写会试图给每一行计算整个列的均值,而不是按日期分组计算每日的均值,完全偏离了你想要的“随时间变化的均值”效果。

两种解决方案

方案1:先预处理数据(推荐,逻辑更清晰)

先用dplyr包按日期分组,计算每日的hornsgatan均值,再用处理好的数据绘图:

library(dplyr)
library(ggplot2)

# 第一步:计算每日均值
daily_hornsgatan <- Stockholm1 %>%
  group_by(date) %>%
  summarise(daily_mean = mean(hornsgatan, na.rm = TRUE))

# 第二步:绘制折线图
ggplot(daily_hornsgatan, aes(x = date, y = daily_mean)) +
  geom_line() +
  labs(title = "Hornsgatan Mean", x = "Date", y = "PM10")

方案2:用ggplot内置函数直接计算

如果不想单独预处理数据,可以用stat_summary()让ggplot自动按日期分组计算均值并绘制折线:

library(ggplot2)

ggplot(Stockholm1, aes(x = date, y = hornsgatan)) +
  stat_summary(fun = mean, geom = "line", na.rm = TRUE) +
  labs(title = "Hornsgatan Mean", x = "Date", y = "PM10")

两种方法都能帮你生成想要的随时间变化的均值折线图,第一种预处理数据的方式更灵活,方便后续扩展分析;第二种则适合快速生成图表。

内容的提问来源于stack exchange,提问作者B.Bos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:31:07