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

如何绘制女性平均生育数年份趋势图?解决R语言趋势线与X轴问题

解决R语言时间趋势图的两个问题及通用绘制方法

一、给基础绘图添加趋势线

你用aggregate得到的mean_children_yearly是数据框,直接绘图后可通过拟合回归模型添加趋势线,代码示例如下:

# 计算年度平均生育数
mean_children_yearly <- aggregate(kids ~ year, fertility, FUN = mean)       
# 绘制基础折线图(加type="l"切换为折线,默认是散点)
plot(kids ~ year, data = mean_children_yearly, xlim=c(2002,2014),
     ylim=range(mean_children_yearly$kids), type="l", col="blue", lwd=2)
# 拟合线性回归模型
trend_model <- lm(kids ~ year, data = mean_children_yearly)
# 添加红色线性趋势线
abline(trend_model, col="red", lwd=2)

如果需要平滑趋势线(非严格线性),可以用loess方法:

# 拟合平滑模型
smooth_model <- loess(kids ~ year, data = mean_children_yearly)
# 生成年份序列对应的预测值
pred_smooth <- predict(smooth_model, newdata = data.frame(year=seq(2002,2014,1)))
# 添加绿色平滑趋势线
lines(seq(2002,2014,1), pred_smooth, col="green", lwd=2, lty=2)

二、用ts函数绘图时显示年份

直接将数据框转为ts对象会把年份也纳入序列,正确做法是单独提取均值列,指定时间序列的起始年份和频率(年度数据frequency=1),再手动设置X轴刻度:

# 提取均值列生成ts对象,指定起始年份2002、年度数据
a <- ts(mean_children_yearly$kids, start=2002, frequency=1)
# 绘图时先隐藏默认X轴
plot(a, xaxt="n", col="blue", lwd=2, main="年度平均生育数趋势", ylab="平均生育数")
# 手动添加2002-2014年的刻度
axis(1, at=seq(2002,2014,1), labels=seq(2002,2014,1))

三、均值随年份变化的时间趋势图通用方法

方法1:基础R实现

  1. 数据聚合:按年份分组计算均值,两种常用方式:
    # 用aggregate函数
    yearly_mean <- aggregate(目标变量 ~ year, 数据集, FUN=mean)
    # 用dplyr包(需先加载)
    library(dplyr)
    yearly_mean <- 数据集 %>% 
      group_by(year) %>% 
      summarize(mean_value = mean(目标变量, na.rm=TRUE))
    
  2. 绘制趋势图:可选择散点、折线或两者结合:
    plot(mean_value ~ year, data=yearly_mean, type="b", pch=16, col="darkblue",
         xlab="年份", ylab="均值", main="年度均值时间趋势")
    
  3. 添加趋势线:线性趋势用abline(lm(...)),平滑趋势用loess+lines(参考前文示例)。

方法2:ggplot2实现(灵活美观)

ggplot2处理时间趋势更直观,自带丰富美化选项:

library(ggplot2)

# 确保年份为数值型(若为字符型需转换)
yearly_mean$year <- as.numeric(yearly_mean$year)

ggplot(yearly_mean, aes(x=year, y=mean_value)) +
  geom_line(color="darkblue", linewidth=1) + # 绘制折线
  geom_point(color="red", size=2) + # 添加散点标记
  geom_smooth(method="lm", color="green", se=FALSE) + # 线性趋势线,se=FALSE隐藏置信区间
  # 若需平滑趋势,替换为:geom_smooth(method="loess", color="orange", se=FALSE)
  scale_x_continuous(breaks=seq(2002,2014,1)) + # 设置年份刻度间隔
  labs(title="年度平均生育数时间趋势", x="年份", y="平均生育数") +
  theme_minimal() # 应用简洁主题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:01:14