根据 "group_by" 样式的条件从数据框中绘制直方图

Plot histograms from data frame based on conditions as "group_by" style

我有一个包含多列的数据框。我正在尝试绘制其中一些列对其他列的作用。首先,这里是列的概述:

  1. 这应该是我直方图上的x轴,它是一年中的天数(01是1月1日,34是2月3日,依此类推)

    head(df$day_number) [1] 302 60 314 83 92 32

  2. 这是属于您正在查看的那一年的某一天的十年(有一列只给出了年份)

    head(df$decade) [1] "2010-2019" "1980-1989" "1990-1999" "2000-2009" "2020-2029" "2000-2009"

  3. 这是与一天相关的每个数据的纬度

    head(df$lat) [1] 56 62 56 57 65 58

我正在寻找的输出将是一系列直方图,在 x 中表示 day_number,在 y 中表示这一天的数据密度(数据的数量,即具有这一精确日期的行关联),按十年和纬度分组。

作为一个例子,我将有一个直方图表示十年 = 1950-1959 的纬度 = 55,然后十年 = 1960-1969 的纬度 = 55,然后依此类推,还有纬度 =十年的 56 = 1950-1959,然后十年的纬度 = 56 = 1960-1969,等等我所有的纬度和十年。

我设法使用以下代码绘制了每个 day_number(所有十年和所有纬度合并)的数据总量:

ggplot(df, aes(x=day_number)) +
  geom_histogram(color="darkblue", fill="white", bins=366) +
  xlim(0,400) +
  xlab("Day n°") + ylab("Count")

我曾想像这样的东西应该可行,但它没有,而且我没有设法使我的想法可行:

ggplot(df, aes(x=day_number, group_by(lat = "55", decade = "1740-1749"))) +
  geom_histogram() +
  xlim(0,400) +
  xlab("Day n°") + ylab("Count")

我希望有人可以帮助解决这个问题。如果您需要更多信息,请不要犹豫。非常感谢。

facet_wrap()可以做到。

看起来lat目前是一个连续变量。如果有很多可能的值,按此进行分层很快就会失控,因此我会考虑在将其传递给 facet_wrap().

之前将其分类为 cut()
library(dplyr)
library(ggplot2)
df |> 
        mutate(lat_grp = cut(lat, breaks = c(55, 60, 66))) |> 
        ggplot(aes(day_number)) +
        geom_histogram(color="darkblue", fill="white", bins=366) +
        xlim(0,400) +
        xlab("Day n°") + ylab("Count") +
        facet_wrap(vars(decade, lat_grp))