r - 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)
这导致如下所示的左图,该结果对我来说更有意义。
我现在想知道,为什么第一次尝试不会产生与第二次尝试相同的情节。我在这里遗漏了一些明显的东西吗?
解决方案
在您的数据框中,您有代表训练和测试值的“组”列。ggplot 知道您用两组表示一个直方图。您的第二个图表示同一网格上的两个不同的直方图,透明度 (alpha) 使它成为它实际的样子。
此外,也许你会更喜欢这个:
plot3 <- ggplot(data=Donald_1) +
geom_histogram(aes_string(x = "Alter", y = "..count..", fill = "Group"),
bins=20, alpha=0.7, position="dodge")
推荐阅读
- php - 带有 ID 和标题的 CodeIgniter URL 路由
- sqlite - 在 google colab 中加载和使用 sqlite 文件
- security - 为什么 ZAP 认为在这种情况下存在缓冲区溢出?
- ubuntu - 使用 BLAS (LAPACK) 模块编译 Fortran 代码
- python - 试图删除文件中的最后一个字符但不起作用
- flutter - 如何在flutter io中将本地数据库与远程服务器同步
- string - MATLAB:替代使用“eval”来评估字符串
- r - 从忽略 R 中的 NA 的列中收集(或堆叠)值
- c# - 如何在运行时传递参数?
- javascript - 如何强制 Webpack 4 仅检测和重新编译已更改的文件