【发布时间】:2015-06-05 15:56:39
【问题描述】:
我想创建一个线宽取决于变量值的折线图。这很简单;在这方面引发扳手的是我希望这条线平滑。任何建议如何将不断变化的大小变量提供给“stat_smooth”?
数据:
set.seed(1234)
library(ggplot2);library(splines)
data <- data.frame(
date = seq(as.Date('2014-05-01'), length = 31, by = '1 day'),
orders = sample(50:100, 31, replace=TRUE),
revenue = sample(1500:3000, 31, replace=TRUE))
如果我只是使用标准的 ggplot 折线图来绘制随时间变化的订单,很容易让粗细随“收入”而变化:
plot <- ggplot(data, aes(x=date, y=orders))
plot + geom_line(aes(size=revenue))
但我想平滑线条。我一直在使用的方法使用“stat_smooth”(如果有更好的方法,请告诉我)。问题是这不允许改变线宽参数。
平滑线图如下所示:
plot + stat_smooth(method="lm", formula=y~ns(x,15), se=FALSE)
如果我尝试为大小添加一个变量取决于收入,它没有任何效果:
plot + stat_smooth(method="lm", formula=y~ns(x,15), se=FALSE, aes(size=data$revenue))
是否可以根据变量值来改变平滑线的粗细?
【问题讨论】:
-
突然想到:在 ggplot 之外拟合模型,将拟合值拉入常规
geom_line层。 -
@joran,你能补充一点关于你将如何做到这一点的细节吗?
-
stat_smooth只是将lm与您提供的公式相匹配。分别执行此操作,并使用predict将预测值存储在单独的数据帧中,然后将该数据帧传递给geom_line层。 -
明白了。不幸的是,这条线并不像我希望的那样平滑: mod1
-
...所以以更精细的规模调用 predict ,并以更精细的规模提供
x值。