绘制所有数据点的平滑线

栏目: 编程工具 · 发布时间: 6年前

内容简介:翻译自:https://stackoverflow.com/questions/35205795/plotting-smooth-line-through-all-data-points

我正在尝试绘制一条直接穿过我所有数据点的平滑线,并且具有基于另一个变量的渐变.理论上多项式插值可以完成工作,但我不确定如何使用ggplot.这是我到目前为止所提出的:

数据:

dayofweek hour impressions conversions      cvr
         1    0     3997982       352.0 8.80e-05
         1    1     3182678       321.2 1.01e-04
         1    2     2921004       248.6 8.51e-05
         1    3     1708627       115.6 6.77e-05
         1    4     1225059        98.4 8.03e-05
         1    5     1211708        62.0 5.12e-05
         1    6     1653280       150.0 9.07e-05
         1    7     2511577       309.4 1.23e-04
         1    8     3801969       397.8 1.05e-04
         1    9     5144399       573.0 1.11e-04
         1   10     5770269       675.6 1.17e-04
         1   11     6936943       869.8 1.25e-04
         1   12     7953053       996.4 1.25e-04
         1   13     8711737      1117.8 1.28e-04
         1   14     9114872      1217.4 1.34e-04
         1   15     9257161      1155.2 1.25e-04
         1   16     8437068      1082.0 1.28e-04
         1   17     8688057      1047.2 1.21e-04
         1   18     9200450      1114.0 1.21e-04
         1   19     8494295      1086.8 1.28e-04
         1   20     9409142      1092.6 1.16e-04
         1   21    10500000      1266.8 1.21e-04
         1   22     9783073      1196.4 1.22e-04
         1   23     8225267       812.0 9.87e-05

R代码:

ggplot(d) + 
  geom_line(aes(y=impressions, x=hour, color=cvr)) +
  stat_smooth(aes(y=impressions, x=hour), method = lm, formula = y ~ poly(x, 10), se = FALSE)

所以我可以使用geom_line获得我想要的渐变但不平滑.使用stat_smooth,我得到一条平滑的线,但它不会遍历所有数据点,也没有我想要的渐变.有关如何实现这一目标的任何想法?

绘制所有数据点的平滑线

如果你希望它通过你所有的点,那么你正在使用它的意义上的多项式插值可能不是最好的想法.如果它应该通过所有点,你有24个点,需要23阶的多项式.我似乎无法使用23度的聚合物,但使用较小的程度已经足以告诉你,为什么这不起作用:

ggplot(d) + 
  geom_point(aes(x = hour, y = impressions, colour = cvr), size = 3) +
  stat_smooth(aes(x = hour, y = impressions), method = "lm",
              formula = y ~ poly(x, 21), se = FALSE) +
  coord_cartesian(ylim = c(0, 1.5e7))

绘制所有数据点的平滑线

这或多或少地经历了所有点(如果我设法使用更高阶的多项式,它确实会这样),但是否则它可能不是你想要的那种平滑曲线.

一个更好的选择是使用插值 splines .这也是一个使用多项式的插值,但不是只使用一个(如你所尝试的),它使用很多.它们被强制执行以使曲线连续的方式遍历所有数据点.

据我所知,这不能直接用ggplot完成,但可以使用ggalt :: geom_xspline完成.

在这里,我展示了一个基本解决方案,其中样条插值在单独的步骤中生成:

spline_int <- as.data.frame(spline(d$hour, d$impressions))

您需要as.data.frame,因为样条线返回一个列表.现在,您可以使用geom_line()在绘图中使用该新数据:

ggplot(d) + 
  geom_point(aes(x = hour, y = impressions, colour = cvr), size = 3) +
  geom_line(data = spline_int, aes(x = x, y = y))

绘制所有数据点的平滑线

翻译自:https://stackoverflow.com/questions/35205795/plotting-smooth-line-through-all-data-points


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

面向对象分析与设计

面向对象分析与设计

Grady Booch、Robert A. Maksimchuk、Michael W. Engel、Bobbi J. Young、Jim Conallen、Kelli A. Houston / 王海鹏、潘加宇 / 人民邮电出版社 / 2009-8 / 79.00元

《面向对象分析与设计(第3版)》是UML创始人Grady Booch的代表作之一,书中介绍的概念都基于牢固的理论基础。同时,《面向对象分析与设计(第3版)》又是一本注重实效的书,面向架构师和软件开发者等软件工程实践者的实际需要。《面向对象分析与设计(第3版)》通过大量例子说明了基本概念,解释了方法,并展示了在不同领域的成功应用。全书分为理论和应用两部分。理论部分深刻剖析了面向对象分析与设计(OOA......一起来看看 《面向对象分析与设计》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具