在ggplot2中绘制季节时间序列

时间:2019-12-05 18:48:52

标签: r ggplot2 plot time-series

我想知道是否有人知道如何更好地绘制时间序列数据,而ggplot对象上的x轴将成为因子或字符分类对象。下面是一个人口示例,该物种的多样性在冬季降低,并且已经灭绝。人口将在秋天增加。有没有更好的方式来显示此数据?任何建议,将不胜感激。

library(ggplot2)
library(data.table)

d <- rep(c(0, 10, 6, 0), 4)
time <- rep(c("Fall", "Fall", "Winter", "Winter"), 4)
year <- rep(1:4, each=4)
dt <- data.table(cbind(d, time, year))
dt$d <- as.numeric(dt$d)
dt$year <- as.numeric(dt$year)

ggplot(dt, aes(x=interaction(time, year), y=d, group=1)) +
  geom_line(position="identity", size=1) +
  geom_point(size=2)+
  labs(x="Year",
       y= "Diversity") +
  theme_classic()

具体来说,我想在每个冬季和秋季之间休息一下。所以每隔一年就有间隔。

2 个答案:

答案 0 :(得分:4)

我将使用不同的方法-使用颜色可视化每个冬至(a = 220 while test_condition: try: biglist.remove(a) except ValueError: a -= 1 continue )之间的间隔,将x轴转换为连续的(从geom_rect转换为数据的大小)。

使用OP数据:

1

enter image description here

答案 1 :(得分:0)

编辑以显示如何使用两个不同的y变量。请注意,在此解决方案中,零数据点位于测量数据点的正下方。据我了解,您正在尝试完成的工作,对于具有测量值的时期和具有灭绝时期的时期,您将需要不同的时间点。

在行中创建中断的一种简单方法是用NA替换零。根据您的用途,您可能希望将y轴延伸为零。我更喜欢使用coord_cartesian。在第二张图中,我们将y的美学效果更改为使用完整的d列,从而使零点得以显示。

library(ggplot2)
library(data.table)

d <- rep(c(0, 10, 6, 0), 4)
time <- rep(c("Fall", "Fall", "Winter", "Winter"), 4)
year <- rep(1:4, each=4)
dt <- data.table(cbind(d, time, year))
dt$d <- as.numeric(dt$d)
dt$year <- as.numeric(dt$year)


# Plot with breaks in line, replace 0 with NA
dt <- dplyr::mutate(dt, d_na = ifelse(d == 0, NA, d))

ggplot(dt, aes(x=interaction(time, year), y=d_na, group=1)) +
  geom_line(position="identity", size=1) +
  geom_point(size=2)+
  labs(x="Year",
       y= "Diversity") +
  theme_classic() + 
  coord_cartesian(ylim = c(0,max(dt$d, na.rm = T)))

# Plot with zero points, use two different y variables
ggplot(dt, aes(x=interaction(time, year), y=d_na, group=1)) +
  geom_line(position="identity", size=1) +
  geom_point(aes(y = d), size=2)+
  labs(x="Year",
       y= "Diversity") +
  theme_classic() + 
  coord_cartesian(ylim = c(0,max(dt$d, na.rm = T)))