您可以将数据重新整形为长格式(在加入两个数据集之后)并使用geom_col一次,或者像您的问题一样使用两个几何。但是,后者需要一些变化才能具有aesingeom_col和 not in ggplot。
下面,我有一个mpg数据集示例,说明了两个选项(加入除外)。我还在您的数据集中包含了一个示例,但由于您没有可重现的示例,因此我无法确定结果。
library(dplyr)
library(ggplot2)
library(tidyr)
## Calling geom_col twice
mpg %>%
group_by(manufacturer) %>%
summarise_if(is.numeric, mean) %>%
select(manufacturer, cty, hwy) %>%
ggplot() +
geom_col(aes(x=manufacturer, y=hwy, fill="hwy")) +
geom_col(aes(x=manufacturer, y=-cty, fill="cty")) +
theme(axis.text.x = element_text(angle = 90, vjust = 0.4))
## Converting data to long format
mpg %>%
group_by(manufacturer) %>%
summarise_if(is.numeric, mean) %>%
mutate(cty = -cty) %>%
select(manufacturer, cty, hwy) %>%
pivot_longer(., -manufacturer) %>%
ggplot() +
geom_col(aes(x=manufacturer, y=value, fill=name)) +
theme(axis.text.x = element_text(angle = 90, vjust = 0.4))

对于您的数据集,首先我们将它们加入date列,然后我们可以geom_col在每个所需的列上使用它们。请注意,我有aesingeom_col而不是ggplot. 您需要确保您的date专栏不是类别factor(但加入可能会解决该问题)。如果您共享dput(head(dataset))两个数据集的每一个的输出,我可以进一步调查您的问题。
recent_school_shootings %>%
full_join(., school_purchases_month, by = "date", suffix = c("s", "p")) %>%
ggplot() +
geom_col(aes(x=date, y=total, fill="Purchase")) +
geom_col(aes(x=date, y=-killed, fill="Shooting"))
由reprex 包于 2020-05-20 创建(v0.3.0)