我想知道是否有人知道如何更好地绘制时间序列数据,而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()
具体来说,我想在每个冬季和秋季之间休息一下。所以每隔一年就有间隔。
答案 0 :(得分:4)
我将使用不同的方法-使用颜色可视化每个冬至(a = 220
while test_condition:
try:
biglist.remove(a)
except ValueError:
a -= 1
continue
)之间的间隔,将x轴转换为连续的(从geom_rect
转换为数据的大小)。
使用OP数据:
1
答案 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)))