我正在尝试将3个独立的数据帧( 2018,2019和2020文件)组合在一起,以制作一个从1月到12月的时间序列图,但到目前为止,我只能制作一个长图,2018年1月到2020年6月。我希望看到一张线形图,每一条线代表一年。下面粘贴了3年数据的预览。很难从下面看出,但是月、日和小时都在单独的列中。
谢谢你的帮忙!
2020 DATA
Site Parameter Date (LT) Year MonthDayHourRaw Conc.
Kathmandu PM2.5 - Principal 1/1/2020 1:00 2020 1 1 1 171
Kathmandu PM2.5 - Principal 1/1/2020 2:00 2020 1 1 2 161
Kathmandu PM2.5 - Principal 1/1/2020 3:00 2020 1 1 3 121
Kathmandu PM2.5 - Principal 1/1/2020 4:00 2020 1 1 4 119
Kathmandu PM2.5 - Principal 1/1/2020 5:00 2020 1 1 5 137
2019 DATA
Site Parameter Date (LT) Year MonthDayHourRaw Conc.
Kathmandu PM2.5 - Principal 1/1/2019 1:00 2020 1 1 1 200
Kathmandu PM2.5 - Principal 1/1/2019 2:00 2020 1 1 2 185
Kathmandu PM2.5 - Principal 1/1/2019 3:00 2020 1 1 3 180
Kathmandu PM2.5 - Principal 1/1/2019 4:00 2020 1 1 4 190
Kathmandu PM2.5 - Principal 1/1/2019 5:00 2020 1 1 5 200
2018 DATA
Site Parameter Date (LT) Year MonthDayHourRaw Conc.
Kathmandu PM2.5 - Principal 1/1/2019 1:00 2020 1 1 1 250
Kathmandu PM2.5 - Principal 1/1/2019 2:00 2020 1 1 2 215
Kathmandu PM2.5 - Principal 1/1/2019 3:00 2020 1 1 3 270
Kathmandu PM2.5 - Principal 1/1/2019 4:00 2020 1 1 4 221
Kathmandu PM2.5 - Principal 1/1/2019 5:00 2020 1 1 5 250发布于 2020-06-11 01:48:00
如果您能够以一种易于复制的格式发布数据帧,比如使用dput(data.frame),那将会很有帮助。无论如何,我已经通过创建以下单个数据帧、df_2018、df_2019和df_2020大致复制了您的数据集。
df_2018 <- data.frame(Raw.Conc=c(171,161,121,119,137), Date=c('1/5/2018','2/12/2018','3/1/2018','4/4/2018','5/2/2018'))
df_2019 <- data.frame(Raw.Conc=c(200,185,180,190,200), Date=c('1/2/2019','2/12/2019','3/3/2019','4/1/2019','5/6/2019'))
df_2020 <- data.frame(Raw.Conc=c(250,215,270,221,250), Date=c('1/1/2020','2/5/2020','3/4/2020','4/7/2020','5/5/2020'))数据的准备
每个数据帧包含两列:一列是数字向量$Raw.Conc,另一列现在是因子$Date。第一步是我们应该将这些数据库合并为一个数据库。至关重要的是,我们需要维护有关每个数据集的来源的信息,我可以首先为每个数据集创建一个名为$origin之类的新列,但是在使用lubridate包将$Date列转换为一个Date类并为每个日期提取具体年份之后,按类别分离数据会更简单。请参见以下代码:
# merging datasets
df <- rbind(df_2018, df_2019, df_2020)
# format $Date field
df$Date <- as.Date(df$Date, format='%m/%d/%Y')
# create new column for year
df$Year <- as.character(year(df$Date))注意,我使用了lubridate中的year()函数来创建df$Year。year()的输出是数字的,所以我将其转换为字符向量,以确保此特定列被视为离散的,而不是连续的,以便我们稍后使用。
绘图
这足以创建图,但请记住,df$Date表示不同的年份,因此线不会重叠x轴上的相同空间,而是分开的。当我们将df$Date绘制为x轴,将df$Raw.Conc绘制在y轴上,并使用df$Year作为geom_line()的color=美学时,请观察输出
ggplot(df, aes(Date, Raw.Conc)) + geom_line(aes(color=Year))

据我所知,这不是你想要的。我们实际上需要删除日期,只绘制月/日。也许有一种优雅的方式可以做到这一点。但在这里,我将破解一个解决方案,基本上将所有日期放在同一年,这样它们就会像在同一年一样被绘制出来(这是您想要的行为)。请注意以下代码:
# create character vector of "mm-dd"
df$Date.axis <- paste0(month(df$Date),'-',day(df$Date))
# turn that into a class(Date)
df$Date.axis <- as.Date(df$Date.axis, format='%m-%d')如果你查看df$Date.axis,你会看到它包含了所有这些项目的当前年份(2020),但它可以满足我们的目的。我们现在可以绘制图形,但是使用scale_x_date()来控制x轴的标签,这样我们就只包含月份(忽略年份)。
ggplot(df, aes(x=Date.axis, y=Raw.Conc)) + geom_line(aes(color=Year)) +
scale_x_date(date_labels = '%b')

改变外观和标签以获得你想要的图表,但这是一个通用的方法,应该适用于你想要做的事情。
https://stackoverflow.com/questions/62293561
复制相似问题