简体   繁体   English

带有 ggplot2 的 ACF 图:设置 geom_bar 的宽度

[英]ACF Plot with ggplot2: Setting width of geom_bar

With acf we can make ACF plot in base R graph.使用acf我们可以在基础R图中ACF plot图。

x <- lh
acf(x)

在此处输入图片说明

The following code can be used to get the ACF plot in ggplot2 .以下代码可用于获取ggplot2ACF plot

conf.level <- 0.95
ciline <- qnorm((1 - conf.level)/2)/sqrt(length(x))
bacf <- acf(x, plot = FALSE)
bacfdf <- with(bacf, data.frame(lag, acf))

library(ggplot2)
q <- ggplot(data=bacfdf, mapping=aes(x=lag, y=acf)) +
       geom_bar(stat = "identity", position = "identity")
q

在此处输入图片说明

Question问题

How to get lines rather than bars or how to set the width of bars so that they look like lines?如何获得线条而不是条形或如何设置条形的宽度使它们看起来像线条? Thanks谢谢

You're probably better off plotting with line segments via geom_segment()您最好通过geom_segment()绘制线段

library(ggplot2)

set.seed(123)
x <- arima.sim(n = 200, model = list(ar = 0.6))

bacf <- acf(x, plot = FALSE)
bacfdf <- with(bacf, data.frame(lag, acf))

q <- ggplot(data = bacfdf, mapping = aes(x = lag, y = acf)) +
       geom_hline(aes(yintercept = 0)) +
       geom_segment(mapping = aes(xend = lag, yend = 0))
q

在此处输入图片说明

How about using geom_errorbar with width=0?如何使用宽度 = 0 的 geom_errorbar ?

ggplot(data=bacfdf, aes(x=lag, y=acf)) + 
    geom_errorbar(aes(x=lag, ymax=acf, ymin=0), width=0)

@konrad; @康拉德; try the following code:试试下面的代码:

library(ggfortify)
p1 <- autoplot(acf(AirPassengers, plot = FALSE), conf.int.fill = '#0000FF', conf.int.value = 0.8, conf.int.type = 'ma') 
print(p1) 
library(cowplot) 
ggdraw(switch_axis_position(p1, axis = 'xy', keep = 'xy'))

在此处输入图片说明

From the forecast package comes a function ggtsdisplay that plots both ACF and PACF with ggplot .从预测的包中附带的功能ggtsdisplay该地块既ACF和PACF与ggplot x is the residuals from the model fit ( fit$residuals ). x是模型拟合的残差 ( fit$residuals )。

forecast::ggtsdisplay(x,lag.max=30)

From your answers, I synthesized a ggplot ACF / PACF plotting method :根据您的回答,我综合了 ggplot ACF / PACF 绘图方法:

    require(zoo)
    require(tseries)
    require(ggplot2)
    require(cowplot)

    ts= zoo(data[[2]]) # data[[2]] because my time series data was the second column

    # Plot ACP / ACF with IC
    # How to compute IC for ACF and PACF :
    # https://stats.stackexchange.com/questions/211628/how-is-the-confidence-interval-calculated-for-the-acf-function
    ic_alpha= function(alpha, acf_res){
      return(qnorm((1 + (1 - alpha))/2)/sqrt(acf_res$n.used))
    }

    ggplot_acf_pacf= function(res_, lag, label, alpha= 0.05){
      df_= with(res_, data.frame(lag, acf))
      
      # IC alpha
      lim1= ic_alpha(alpha, res_)
      lim0= -lim1
      
      
      ggplot(data = df_, mapping = aes(x = lag, y = acf)) +
        geom_hline(aes(yintercept = 0)) +
        geom_segment(mapping = aes(xend = lag, yend = 0)) +
        labs(y= label) +
        geom_hline(aes(yintercept = lim1), linetype = 2, color = 'blue') +
        geom_hline(aes(yintercept = lim0), linetype = 2, color = 'blue')
    }

    acf_ts= ggplot_acf_pacf(res_= acf(ts, plot= F)
                   , 20
                   , label= "ACF")
    pacf_ts= ggplot_acf_pacf(res_= pacf(ts, plot= F)
                         , 20
                         , label= "PACF")
    # Concat our plots
    acf_pacf= plot_grid(acf_ts, pacf_ts, ncol = 2, nrow = 1)
    acf_pacf

Results:结果:

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM