绘制 2 个 ACF ggplot2 - 显示最小值颜色
Plotting 2 ACFs ggplot2 - Show Minimum Value Colour
我正在尝试使用 ggplot 在 R 中绘制 2 个 ACF。我使用 geom_segment() 并且它工作正常,但有一点烦人的细节是,根据我声明 geom_segment 的顺序,如果我在最大值之前声明最小 ACF,则绘图将覆盖最小 ACF。如果一个 ACF 始终具有较大的值(我之前会 geom_segment 的情况),这将不是问题。我知道这听起来很混乱,所以这是一个有效的例子:
library(ggplot2)
library(grid)
library(plyr)
set.seed(123)
data1 <- arima.sim(n = 10000, model = list(ar = 0.4,ma=0.4))
data2 <- arima.sim(n = 10000, model = list(ma = c(0.9,0.3)))
acf1 <- acf(data1, plot = FALSE,lag.max=15)
acf1DF <- with(acf1, data.frame(lag, acf))
acf1DF$lag <- as.integer(acf1DF$lag)
acf2 <- acf(data2, plot = FALSE,lag.max=15)
acf2DF <- with(acf2, data.frame(lag, acf))
acf2DF$lag <- as.integer(acf2DF$lag)
q <- ggplot(data = acf1DF, mapping = aes(x = lag, y = acf)) +
geom_hline(aes(yintercept = 0)) +
geom_segment(mapping = aes(xend = lag, yend = 0,color="red")) +
geom_segment(data=acf2DF,mapping = aes(x=lag,y=acf,xend = lag, yend = 0),
inherit.aes=FALSE,show.legend=FALSE)
q
请注意,我看不到第一个滞后的最小值。
谢谢。
您可以改为创建条形图吗?分段重叠使您的绘图不易理解的问题可能指向使用不同的可视化作为解决方案。这是一个条形图:
首先,我们通常在 ggplot 中合并数据,当您多次调用 geom
时,您做的事情不对。
acf1DF$group <- 1
acf2DF$group <- 2
dat <- rbind(acf1DF,acf2DF)
然后我们可以制作条形图:
p1 <- ggplot(dat,aes(x=factor(lag), y=acf,fill=factor(group))) +
geom_bar(width=0.3,stat="identity", position=position_dodge())
或者,如果我们真的想要线段而不是条形图(例如因为我们想要一个连续的 x 轴,或者喜欢线条的外观作为图例),我们可以在绘图之前添加一个轻微的偏移量以滞后于第 2 组
dat$lag_offset <- dat$lag + as.numeric(dat$group==2) * 0.1
然后绘制片段:
p2 <- ggplot(dat, aes(x=lag_offset, xend=lag_offset, y=0,yend=acf, color=factor(group))) +
geom_segment() +
scale_color_manual(values=c(`1`="black",`2`="red"))
我正在尝试使用 ggplot 在 R 中绘制 2 个 ACF。我使用 geom_segment() 并且它工作正常,但有一点烦人的细节是,根据我声明 geom_segment 的顺序,如果我在最大值之前声明最小 ACF,则绘图将覆盖最小 ACF。如果一个 ACF 始终具有较大的值(我之前会 geom_segment 的情况),这将不是问题。我知道这听起来很混乱,所以这是一个有效的例子:
library(ggplot2)
library(grid)
library(plyr)
set.seed(123)
data1 <- arima.sim(n = 10000, model = list(ar = 0.4,ma=0.4))
data2 <- arima.sim(n = 10000, model = list(ma = c(0.9,0.3)))
acf1 <- acf(data1, plot = FALSE,lag.max=15)
acf1DF <- with(acf1, data.frame(lag, acf))
acf1DF$lag <- as.integer(acf1DF$lag)
acf2 <- acf(data2, plot = FALSE,lag.max=15)
acf2DF <- with(acf2, data.frame(lag, acf))
acf2DF$lag <- as.integer(acf2DF$lag)
q <- ggplot(data = acf1DF, mapping = aes(x = lag, y = acf)) +
geom_hline(aes(yintercept = 0)) +
geom_segment(mapping = aes(xend = lag, yend = 0,color="red")) +
geom_segment(data=acf2DF,mapping = aes(x=lag,y=acf,xend = lag, yend = 0),
inherit.aes=FALSE,show.legend=FALSE)
q
请注意,我看不到第一个滞后的最小值。
谢谢。
您可以改为创建条形图吗?分段重叠使您的绘图不易理解的问题可能指向使用不同的可视化作为解决方案。这是一个条形图:
首先,我们通常在 ggplot 中合并数据,当您多次调用 geom
时,您做的事情不对。
acf1DF$group <- 1
acf2DF$group <- 2
dat <- rbind(acf1DF,acf2DF)
然后我们可以制作条形图:
p1 <- ggplot(dat,aes(x=factor(lag), y=acf,fill=factor(group))) +
geom_bar(width=0.3,stat="identity", position=position_dodge())
dat$lag_offset <- dat$lag + as.numeric(dat$group==2) * 0.1
然后绘制片段:
p2 <- ggplot(dat, aes(x=lag_offset, xend=lag_offset, y=0,yend=acf, color=factor(group))) +
geom_segment() +
scale_color_manual(values=c(`1`="black",`2`="red"))