使用ggplot2可视化测试和训练集分布

时间:2019-01-27 18:00:00

标签: r ggplot2

我正在尝试可视化数据集的分布,并将其拆分为测试数据和训练数据,以检查拆分是否分层。

最小示例使用虹膜数据集。它有一个species列,该列是3个级别的因子。以下代码段将显示一个带有每个标签计数的漂亮图表,但是,我想查看各个集合中标签的百分比/概率,以查看训练集和测试集的分布。

library("tidyverse")
data(iris)
n = nrow(iris)
idxTrain <- sample(1:n, size = round(0.7*n), replace = F)
train <- iris[idxTrain,]
test <- iris[-idxTrain,]

iris$Set <- rep("Train", time = nrow(iris))
iris$Set[-idxTrain] <- "Test"

ggplot(iris, aes(x = Species, fill = Set)) + geom_bar(position = "dodge")

Iris dataset train and test sample counts

我尝试计算如下所示的百分比,但是这不起作用,因为它显示了整个数据框的百分比,该百分比显示出与计数相似的分布。

geom_bar(aes(y = (..count..)/sum(..count..)))

如何有效地绘制每个标签在每个标签组中的百分比?

奖金:包括整个数据集,训练和测试。

1 个答案:

答案 0 :(得分:0)

library("tidyverse")
data(iris)
n = nrow(iris)
idxTrain <- sample(1:n, size = round(0.7*n), replace = F)
train <- iris[idxTrain,]
test <- iris[-idxTrain,]

iris$Set <- rep("Train", time = nrow(iris))
iris$Set[-idxTrain] <- "Test"

标签需要单独的数据框

df_labs <- 
 iris %>% 
 group_by(Species) %>% 
 count(Set) %>% 
 mutate(pct = n / sum(n)) %>% 
 filter(Set == "Test")

用作标签几何(或文本)的数据

ggplot(iris, aes(x = Species, fill = Set)) + 
  geom_bar(position = "dodge") +
  geom_label(data = df_labs, aes(label = scales::percent(pct), y = n / 2))

enter image description here