R facet_wrap 未显示具有不同观察次数的方面
R facet_wrap not showing facet that has different numbers of observations
我正在尝试绘制一组时间序列数据,其中一些数据是每季度观察一次,另一些数据是每月观察一次。但是,当我绘制数据时,包含观察值较少的数据的方面无法正确显示。
在我的实际数据集中,我得到了一些不同的结果,但我认为我在下面的示例中遇到的问题可能是由于相同的潜在问题。您将在下面的示例中看到,最后一个方面根本不显示一条线。在我的实际数据集中,最后一个方面显示了所有的点,但它们在图表的开头被压缩在一起,就好像观察是每月发生的一样。所以最后一个方面的线是帧长度的四分之一,跨越整个时间段。
a <- economics[1:100,]
a[seq(1,100,2), "unemploy"] <- NA
b <- melt(a,id.vars="date")
smPlot <- ggplot(b, aes_string(x="date", y="value")) +
geom_line() +
facet_wrap(~ variable, ncol=5, scales="free")
smPlot
创建以下情节:
您的示例代码中的问题是一条线必须至少有 2 个点。如果每隔一个点都是 NA(如在最后一个方面),则每个线段中只有一个点,因此不会显示任何内容。
为了稍微扩展一下,请考虑如何绘制线条轨迹。它由许多线段组成,每个线段都有起点和终点。在没有任何 NA 的连续数据中,每个段都从最后一个结束的地方开始。但是当数据中有 NA 时,它会断开该行,并从下一个非 NA 数据点开始新的一行。因此,当每个 NA 之间只有一个数据点时,每个线段只有一个点,不能画成一条线(但可以使用 geom_point
显示为一个点)。
如果你只是用 NA 对行进行子集化,它应该看起来不错
smPlot <- ggplot(b[!is.na(b$value), ], aes_string(x="date", y="value")) +
geom_line() +
facet_wrap(~ variable, ncol=5, scales="free")
smPlot
我正在尝试绘制一组时间序列数据,其中一些数据是每季度观察一次,另一些数据是每月观察一次。但是,当我绘制数据时,包含观察值较少的数据的方面无法正确显示。
在我的实际数据集中,我得到了一些不同的结果,但我认为我在下面的示例中遇到的问题可能是由于相同的潜在问题。您将在下面的示例中看到,最后一个方面根本不显示一条线。在我的实际数据集中,最后一个方面显示了所有的点,但它们在图表的开头被压缩在一起,就好像观察是每月发生的一样。所以最后一个方面的线是帧长度的四分之一,跨越整个时间段。
a <- economics[1:100,]
a[seq(1,100,2), "unemploy"] <- NA
b <- melt(a,id.vars="date")
smPlot <- ggplot(b, aes_string(x="date", y="value")) +
geom_line() +
facet_wrap(~ variable, ncol=5, scales="free")
smPlot
创建以下情节:
您的示例代码中的问题是一条线必须至少有 2 个点。如果每隔一个点都是 NA(如在最后一个方面),则每个线段中只有一个点,因此不会显示任何内容。
为了稍微扩展一下,请考虑如何绘制线条轨迹。它由许多线段组成,每个线段都有起点和终点。在没有任何 NA 的连续数据中,每个段都从最后一个结束的地方开始。但是当数据中有 NA 时,它会断开该行,并从下一个非 NA 数据点开始新的一行。因此,当每个 NA 之间只有一个数据点时,每个线段只有一个点,不能画成一条线(但可以使用 geom_point
显示为一个点)。
如果你只是用 NA 对行进行子集化,它应该看起来不错
smPlot <- ggplot(b[!is.na(b$value), ], aes_string(x="date", y="value")) +
geom_line() +
facet_wrap(~ variable, ncol=5, scales="free")
smPlot