我正在尝试可视化数据集的分布,并将其拆分为测试数据和训练数据,以检查拆分是否分层。
最小示例使用虹膜数据集。它有一个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")
我尝试计算如下所示的百分比,但是这不起作用,因为它显示了整个数据框的百分比,该百分比显示出与计数相似的分布。
geom_bar(aes(y = (..count..)/sum(..count..)))
如何有效地绘制每个标签在每个标签组中的百分比?
奖金:包括整个数据集,训练和测试。
答案 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))