我从1700年到1900年(21个时间片)的十进制时间序列,每十年我有7个代表数量的类别; see here
如您所见,几十年中只有5个实际拥有数据。
我可以在this very nice example的帮助下在R中绘制一个漂亮的小堆积区域图表,它只保留有数据的5个时间片。
我的问题是我想要一个x轴,它可以保留所有21次切片,但仍然仅使用5个时间切片绘制堆积面积图。我们的想法是,堆叠区域仍然只能在正确的年份绘制,但只需连接到下一个点,10个沿x轴向下,忽略其间的无数据。我可以在excel中实现一些东西,但我不喜欢它。
我的理由是我想在堆积区域的顶部绘制更完整的线条,例如从1700到1850,或1800到1900,以进行视觉比较。
This post建议如何在想要忽略NA的情况下连接折线图中的点,但在这种情况下它对我不起作用。
a <- 1700:1900
b <- a[seq(1, length(a), 10)]
df <- data.frame("Year"=b,replicate(7,sample(1:21)))
rows <- c(2:10,11:15,17,19,21)
df[rows,2:8] <- NA
df
非常感谢
答案 0 :(得分:1)
如果您希望将您的年份转换为因子,请参阅以下代码:
# Transform the data to long
library(reshape2)
df <- melt(data = df, na.rm = FALSE, id.vars = "Year")
df$Year <- as.factor(df$Year)
# Chart
require(ggplot2)
ggplot(df, aes(Year, value)) +
geom_area(aes(colour = variable, fill= variable), position = 'stack')
它将生成以下图表:
我不确定您是否对映射所有X
变量感兴趣。我认为情况确实如此,所以我重塑了你的数据。据推测,更明智的是不将年份改为因素。以下代码:
a <- 1700:1900
b <- a[seq(1, length(a), 10)]
df <- data.frame("Year"=b,replicate(7,sample(1:21)))
rows <- c(2:10,11:15,17,19,21)
df[rows,2:8] <- NA
# Transform the data to long
library(reshape2)
df <- melt(data = df, na.rm = FALSE, id.vars = "Year")
# Leave it as int.
# df$Year <- as.factor(df$Year)
# Chart
require(ggplot2)
ggplot(df, aes(Year, value)) +
geom_area(aes(colour = variable, fill= variable), position = 'stack')
会产生更有意义的图表:
潜在地,如果您决定使用年数作为因子,您可以将它们分组并且在一些缺失的年份中有一个类别,因此x轴更具可读性。我会说这在很大程度上是一个介绍问题。