我对R还是很陌生的,我一直在努力寻找解决方案。
我有一个列表,它包含了每个月对应的12个数据。(数据$1,数据$2,等等)
每个dataframe包含多年内月份的timeseries数据。我想要可视化这些数据,但是当我尝试用
ggplot(Data$January, aes(x = `Date`, y = `WaterLevel`)) +
geom_point() 一月份的数据显示出来,然而,这幅图显示了几年的时间跨度,但包含了2月至12月的空月。是否有这样的情节只显示一月?
这些数据的结构如下:
数据帧: 15412个。在13个变量中:
$日期:日期,格式:"2006-01-01“"2006-01-02”"2006-01-03“"2006-01-04”.
"NBS01“"NBS01”.
$ Station.Id : num 324 324 324 .
$ Water_level:编号: 201 203 203 203 206 206 208 208 208 .
等价物: num NA ..。
$ site_id : num 324 324 324 .
$ POSIXct : POSIXct,格式:"2006-01-01“"2006-01-02”"2006-01-03“"2006-01-04”
$ wtr_lvlp : num 186 190 191 191 191 .
$ equiv_p : 0.683 0.711 0.699 0.691 0.681 .
$ wtrlvl_Diff : 14.8 12.9 12.3 11.8 11.6 .
$ equiv_Diff : 0.683 0.711 0.699 0.691 0.681 .
wtrlvl_RMSE : num 84.1 84.1 84.1 .
$ equiv_RMSE : num ..。
编辑3: dp(总目(数据$1))
structure(list(Date = structure(c(13149, 13150, 13151, 13152,
13153, 13154), class = "Date"), Station = c("NBS01",
"NBS01", "NBS01", "NBS01", "NBS01", "NBS01"
), Station.Id = c(324, 324, 324, 324, 324, 324), Water_level = c(201,
203, 203, 203, 203, 206), Equivalent = c(NA_real_,
NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), site_id = c(324,
324, 324, 324, 324, 324), POSIXct = structure(c(1136073600, 1136160000,
1136246400, 1136332800, 1136419200, 1136505600), class = c("POSIXct",
"POSIXt"), tzone = "UTC"), wtr_lvlp = c(186.2000028, 190.1000028,
190.7000028, 191.2000028, 191.4000029, 191.6000029), equiv_p = c(0.682899983,
0.711299982, 0.699199982, 0.690699983, 0.681199983, 0.672699983
), wtrlvl_Diff = c(14.79999723, 12.89999717, 12.29999716, 11.79999715,
11.59999715, 14.39999714), equiv_Diff = c(0.682899983, 0.711299982,
0.699199982, 0.690699983, 0.681199983, 0.672699983), wtrlvl_RMSE = c(84.1300149026027,
84.1300149026027, 84.1300149026027, 84.1300149026027, 84.1300149026027,
84.1300149026027), equiv_RMSE = c(NA_real_, NA_real_, NA_real_,
NA_real_, NA_real_, NA_real_)), row.names = 1097:1102, class = "data.frame")发布于 2020-07-01 18:47:36
在您的例子中,您只提供了2006年的数据,因此我们无法观察您的问题。我在2007年1月用虚拟数据扩展了您的数据框架,以包括值。我也只保留您在绘图中使用的两列。
df <- structure(list(Date = structure(c(13149, 13150, 13151, 13152, 13153, 13154,13514,13515,13516,13517,13518,13519), class = "Date"),
Water_level = c(201, 203, 203, 203, 203, 206, 211,213,213,213,213,216)), row.names = 1:12, class = "data.frame")因为您的Date列是日期格式的,所以ggplot将该列中的数据解释为日期,并将在绘制点时考虑到它们之间的实际时间差。也就是说,如果您有一个日期为"2006-01-01“,另一个日期为"2007-01-01",则在该地块中,它们将相隔365天(正如它们应该的那样),并且两者之间的日期将出现在xlabel中。
ggplot(df, aes(x = Date, y = Water_level)) + geom_point()

从你提出的问题来看,你似乎希望将不同年份1月月份的数据在视觉上连在一起,以便"2007-01-01“直接跟随在"2006-01-31”之后。
快速而肮脏的溶液
实现这一目标的一种快速方法是将date列转换为一个因子(一个分类变量)。当您这样做时,您的第一次约会将是您的分类变量中的第一级,第二次约会是您的第二级,等等。由于您只有一月的日期,这将导致"2007-01-01“紧随其后的"2006-01-31”。
# transform Date column to categorical variable
df$Date <- as.factor(df$Date)
# plot again
ggplot(df, aes(x = Date, y = Water_level)) + geom_point()

这个解决方案是快速的,但也有一些缺陷。首先,如果看到这些不同的日期连在一起,可能会让人感到困惑。此外,如果您的数据集跳过了几天(例如从"2006-01-05“跳到"2006-01-15"),那么这些点将连续出现在您的情节中(因为它们将是连续的”类别“)。而且,您可能需要使用xaxis中的标签,因为它们最终会相互取代。
更好的解决办法(在我看来)
一个更好的解决方案是创建另一列,其中包含数据年(使用,原始数据框架,日期为),然后每年在不同的方面进行绘图。
# this package helps to do manipulations with dates
library(lubridate)
#create column with year
df$year <- year(df$Date)
#create plots separating each year in a different facet (scales = "free_x" is important!)
ggplot(df, aes(x = Date, y = Water_level)) + geom_point() + facet_wrap(vars(year), scales="free_x")

希望这能有所帮助!
https://stackoverflow.com/questions/62682363
复制相似问题