按日期时间绘制折线图,​​按日期绘制 histogram/bar 图

Plotting a line graph by datetime with a histogram/bar graph by date

我是 R 的新手,在一些非常基础的 ggplot2 工作上真的需要一些帮助。

我正在尝试在图表上可视化提交总数,在折线图中显示总体总数,在其顶部的直方图(或条形图)中显示每日总数。我不确定如何向直方图添加中断或分箱,以便它采用提交日期时间列并使每个条形成为每日总计。

我尝试添加一个将日期时间转换为日期的列并根据它绘制图表,但我真的希望折线图包含时间。

这是我目前的情况:

df <- df %>%
mutate(datetime = lubridate::mdy_hm(datetime))%>%
mutate(date = lubridate::as_date(datetime))

#sort by datetime 
df <- df %>%
  arrange(datetime)

#add total number of submissions
df <- df %>%
  mutate(total = row_number())

#ggplot
line_plus_histo <- df%>%
  ggplot() +
  geom_histogram(data = df, aes(x=datetime)) +
  geom_line(data = df, aes(x=datetime, y=total), col = "red") +
  stat_bin(data = df, aes(x=date), geom = "bar") +
  labs(
    title="Submissions by Day", 
    x="Date",
    y="Submissions",
    legend=NULL)

line_plus_histo

如您所见,我还通过按时间排序然后添加包含行号的列来计算提交总数。所以,如果你能帮助我使用更好的方法,我将不胜感激。

请在该行下方找到时间与提交的直方图:

Here's the pastebin link with my data

您可以通过以下方式扩展您的数据操作:

df <- df |>
  mutate(datetime = lubridate::mdy_hm(datetime)) |>
  arrange(datetime) |>
  mutate(midday = as_datetime(floor_date(as_date(datetime), unit = "day") + 0.5)) |>
  mutate(totals = row_number()) |>
  group_by(midday) |>
  mutate(N = n())|>
  ungroup()

然后对柱使用 midday,对线使用 datetime

df%>%
  ggplot() +
  geom_bar(data = df, aes(x = midday)) +
  geom_line(data = df, aes(x=datetime, y=totals), col = "red") +
  labs(
    title="Submissions by Day", 
    x="Date",
    y="Submissions",
    legend=NULL)

PS。抱歉,X 轴上的波兰语语言环境。

PS2。使用 geom_bar 看起来好多了

reprex package (v2.0.1)

创建于 2022-02-03