我一直试图绘制一个图表,但出于某种原因,我一直在删除变量。我有一个包含350个观测和11个变量的数据,但是当我试图绘制我的图表时,140个观测值被删除了。
首先,我修改了dataframe,以便在连续两天内根据时间进行绘图:
library(hms)
library(dplyr)
library(ggplot2)
library(tidyr)
library(tidyverse)
#Generate sample data
df <- data.frame(hour = hms(sample(0:59, replace = TRUE, 350),
sample(0:59, replace = TRUE, 350),
sample(c(0:5, 20:23), replace = TRUE, 350)),
count = floor(runif(350, min=0, max=20)))
df <- df %>%
mutate(ai = count/10) %>%
mutate(graphing.date = if_else(
hour > parse_hms("12:00:00"), as.Date("2022-02-05"),
as.Date("2022-02-06")),
graphing.datetime = as.POSIXct(paste(graphing.date, hour)))然后我使用变量graphing.datetime和ai分别作为x和y变量:
p <- ggplot(df, aes(x = graphing.datetime, y = ai)) +
geom_point() +
scale_x_datetime("Time",
limits = c(as.POSIXct("2022-02-05 20:00:00"),
as.POSIXct("2022-02-06 06:00:00")),
date_breaks = "1 hours",
date_labels = "%H:%M")
p当我这样做时,我会得到以下信息:
警告消息:删除了包含缺失值(geom_point)的140行。
我能做些什么来解决这个问题?我的代码有什么问题需要修复吗?
发布于 2022-03-31 21:23:22
您的示例数据(对我来说)不足以触发错误,因此我将修改它:
set.seed(42)
# ... your code ...
head(df)
# hour count ai graphing.date graphing.datetime
# 1 00:58:48 5 0.5 2022-02-06 2022-02-06 00:58:48
# 2 23:48:36 7 0.7 2022-02-05 2022-02-05 23:48:36
# 3 02:29:00 18 1.8 2022-02-06 2022-02-06 02:29:00
# 4 21:58:24 13 1.3 2022-02-05 2022-02-05 21:58:24
# 5 02:20:09 14 1.4 2022-02-06 2022-02-06 02:20:09
# 6 01:43:35 14 1.4 2022-02-06 2022-02-06 01:43:35在这里,注意观察的日期时间范围在您的p过滤器中:
range(df$graphing.datetime)
# [1] "2022-02-05 20:00:25 EST" "2022-02-06 05:59:52 EST"这意味着,如果我们现在做你的p很多,它不会产生警告,而情节显示所有。
p <- ggplot(df, aes(x = graphing.datetime, y = ai)) +
geom_point() +
scale_x_datetime("Time",
limits = c(as.POSIXct("2022-02-05 20:00:00"),
as.POSIXct("2022-02-06 06:00:00")),
date_breaks = "1 hours",
date_labels = "%H:%M")
p

然而,让我们稍微收紧一下limits=,我们将得到警告:
p <- ggplot(df, aes(x = graphing.datetime, y = ai)) +
p <- ggplot(df, aes(x = graphing.datetime, y = ai)) +
geom_point() +
scale_x_datetime("Time",
limits = c(as.POSIXct("2022-02-05 20:10:00"),
as.POSIXct("2022-02-06 05:50:00")),
date_breaks = "1 hours",
date_labels = "%H:%M")
p
# Warning: Removed 17 rows containing missing values (geom_point).这意味着(正如@teunbrand所指出的),您正在强制将数据从地块中删除。一些想法:
limits=,使其包含所需的所有数据。虽然您可以根据观察到的数据以编程方式分配它,但这似乎不太有用,因为它实际上与根本不设置limits=一样。如果您真的希望在打印/呈现此警告时保持沉默,则可以执行
p。(其他可能有用的警告也将被抑制/隐藏,因此谨慎使用此警告。)。
coord_cartesian而不是scale_*_datetime来限制边界。这具有“裁剪”的优点--数据(在处理行/段时绝对是必需的)。然而,当不加区分地使用它时,它会产生副作用,即不告诉您是否或有多少数据超出了您的范围。(这就是为什么我们在这里使用它,是的,只要知道当使用它时,应该慎重考虑。)P <- ggplot(df,aes(x = graphing.datetime,y= ai)) + geom_point() +scale_x_datetime(“时间”,date_breaks = "1小时“,date_labels = "%H:%M") + coord_cartesian(xlim = c(as.POSIXct("2022-02-05 20:10:00"),05:50:00"))) (“2022-02-06 as.POSIXct”)
https://stackoverflow.com/questions/71698739
复制相似问题