首页 > 解决方案 > R ggplot 直方图组显示两组的总和

问题描述

我试图在直方图中绘制我的测试和训练数据集的分布,并发现了一些奇怪的东西:

背景:我有一个包含 50 行的测试集和一个包含相同列结构的 100 行的训练集。

我通常会像这样绘制数据:

plot2 <- ggplot(data=Donald_1) + 
  geom_histogram(aes_string(x = "Alter", y = "..count..", fill = "Group"),
                 bins=20, alpha=0.7)

这会产生如下所示的右直方图。然后我想知道为什么测试的计数高于训练,因为测试集只有 50 行而不是 100 行。似乎测试条显示了左侧图的测试条和训练条的总和。

然后我尝试了:

plot1 <- ggplot() +
  geom_histogram(data=Donald_1 %>% filter(Group == "Training"),
                 aes_string(x="Alter", y="..count..", fill = "Group"),
                 bins=20, alpha=0.7) +
  geom_histogram(data=Donald_1 %>% filter(Group == "Test"),  
                 aes_string(x="Alter", y="..count..", fill="Group"),
                  bins=20, alpha=0.7)

这导致如下所示的左图,该结果对我来说更有意义。

我现在想知道,为什么第一次尝试不会产生与第二次尝试相同的情节。我在这里遗漏了一些明显的东西吗?

并排的代码结果

标签: rggplot2histogram

解决方案


在您的数据框中,您有代表训练和测试值的“组”列。ggplot 知道您用两组表示一个直方图。您的第二个图表示同一网格上的两个不同的直方图,透明度 (alpha) 使它成为它实际的样子。

此外,也许你会更喜欢这个:

plot3 <- ggplot(data=Donald_1) + 
  geom_histogram(aes_string(x = "Alter", y = "..count..", fill = "Group"),
                 bins=20, alpha=0.7, position="dodge")

推荐阅读