首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R ggplot2为只有几个数据点的折线图引入了轻微的平滑

R ggplot2为只有几个数据点的折线图引入了轻微的平滑
EN

Stack Overflow用户
提问于 2013-05-28 18:16:35
回答 2查看 25.4K关注 0票数 3

不确定这是不是编程问题...

如果我有下面的数据,它产生了一个“尖峰”图表,我想用ggplot2产生一个稍微平滑的图表,我如何才能最优雅地去做它。通常的平滑方法删除了太多的信息。我正在考虑的一种方法是在当前集合之间插入额外的两个数据点,然后取两个周期的移动平均值或其他什么。手动编写代码似乎有很多困难的工作,所以我将采取一个优雅地自动化的答案作为最后的手段。

代码语言:javascript
运行
复制
a=data.frame(year=paste('FY',2001:2012,sep='.'),values=rnorm(12))
library(ggplot2)

如你所见,这是尖峰的,在视觉上没有吸引力。

代码语言:javascript
运行
复制
ggplot(a,aes(x=year,y=values,group=1))+geom_line() 

这从图表中删除了太多的信息

代码语言:javascript
运行
复制
ggplot(a,aes(x=year,y=values,group=1))+stat_smooth(se=F) 

谢谢

EN

Stack Overflow用户

回答已采纳

发布于 2013-05-28 18:28:03

你可以尝试一个多项式。由于x轴变量有12个唯一值,因此可以使用高达11次的多项式。此外,应对x轴使用连续缩放,以获得平滑的曲线。

下面是一个8阶多项式的例子:

代码语言:javascript
运行
复制
ggplot(a, aes(x = year, y = values, group = 1))+
  stat_smooth(aes(x = seq(length(unique(year)))), # continuous x-axis
              se = F, method = "lm", formula = y ~ poly(x, 8)) +
  scale_x_continuous(breaks = seq(length(unique(a$year))), 
                     labels = levels(a$year)) # original labels

这里,method = "lm"指的是使用线性模型。poly函数的第二个参数指定度数。

票数 9
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16789502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档