我是R的新手,我有下面的示例代码,我希望应用于我的数据中的每一列。
data(economics, package="ggplot2")
economics$index <- 1:nrow(economics)
loessMod10 <- loess(uempmed ~ index, data=economics, span=0.10)
smoothed10 <- predict(loessMod10)
plot(economics$uempmed, x=economics$date, type="l", main="Loess Smoothing and Prediction", xlab="Date", ylab="Unemployment (Median)")
lines(smoothed10, x=economics$date, col="red")有人能给我建议一下这怎么可能吗?
发布于 2022-06-16 08:30:20
这是有可能进行黄土平滑在全球范围内。
library(data.table)
library(ggplot2)
df <- economics
##
#
gg.melt <- setDT(df) |> melt(id='date', variable.name = 'KPI')
ggplot(gg.melt, aes(x=date, y=value))+
geom_line()+
stat_smooth(method=loess, color='red', size=0.5, se=FALSE, method.args = list(span=0.1))+
facet_wrap(~KPI, scales = 'free_y')

关于把所有的东西结合在一起,我看不出你会怎么做,因为y尺度是如此的不同。如果重点是查看峰是如何排列起来的,那么您可以这样做:
ggplot(gg.melt, aes(x=date, y=value))+
geom_line()+
stat_smooth(method=loess, color='red', size=0.5, se=FALSE, method.args = list(span=0.1))+
facet_grid(KPI~., scales = 'free_y')

还有一个dygraphs包,它允许创建动态图形,可以保存到html中:
gg.melt[, scaled:=scale(value, center = FALSE, scale=diff(range(value))), by=.(KPI)]
gg.melt[, pred:=predict(loess(scaled~as.integer(date), .SD, span=0.1)), by=.(KPI)]
gg.dt <- dcast(gg.melt, date~KPI, value.var = list('scaled', 'pred'))
library(dygraphs)
dygraph(gg.dt) |>
dyCrosshair(direction = 'vertical') |>
dyRangeSelector()

可以创建第二个图的dygraph(...)版本,其中不同的KPI处于不同的方面,但必须使用RMarkdown。
发布于 2022-06-15 15:34:23
您可以按日期将数据从宽到长,并使用facet_wrap。也许你想要这样的东西:
library(ggplot2)
library(reshape2)
library(dplyr)
economics %>%
melt(., "date") %>%
ggplot(., aes(date, value)) +
geom_line() +
facet_wrap(~variable, scales = "free")输出:

注释:一张图中的所有情节
如果您指的是一个图中的所有图,您可以给变量一个如下的颜色:
economics %>%
melt(., "date") %>%
ggplot(., aes(date, value, color = variable)) +
geom_line() +
scale_y_log10()输出:

https://stackoverflow.com/questions/72634082
复制相似问题