使用ggplot绘制表格对象?

13

我有这些数据:

         No    Yes
Female  411   130
Male    435   124

使用标准表格命令创建了一个表格。现在,我可以用plot函数将其绘制成如下图形:

plot(table(df$gender, df$fraud))

这将输出一个2x2的条形图。

我的问题是,如何使用ggplot2实现类似的效果?有没有不将表格对象转换为数据框的方法?我可以这样做,但它会变得混乱,你需要重新命名列和行标题,而这只是一件非常简单的事情。


(Tips: ggplot2 is a package for data visualization in R)

plot(table(df$gender, df$fraud)) 实际上返回的是马赛克图,对吗? - Quinten
3个回答

25

例如某事

ggplot(as.data.frame(table(df)), aes(x=gender, y = Freq, fill=fraud)) + 
    geom_bar(stat="identity")

获得一个类似的图表,最少需要重新标记。


2
如果有一个可以查看(图表)和运行(代码)的示例,那将非常有帮助。 - baxx

5

ggplot2适用于数据框,因此您需要将表格转换为框架。以下是示例代码:

myTable <- table(df$gender, df$fraud)
myFrame <- as.data.frame(table(myTable))

现在,您可以在ggplot2中使用myFrame:
ggplot(myFrame, aes(x=gender))+
  geom_bar(y = Freq)

请查看转换为数据框以获取更多信息。

1

记录一下,janitor::tabyl()输出的列联表是数据框。因此,在基于tidyverse工具的工作流中更加方便。

例如:

# Data
df <- data.frame(gender = c(rep("female", times = 411),
                            rep("female", times = 130),
                            rep("male", times = 435),
                            rep("male", times = 124)),
                 fraud = c(rep("no", times = 411),
                           rep("yes", times = 130),
                           rep("no", times = 435),
                           rep("yes", times = 124)))

# Plotting the tabulation with tidyverse tools
df |> 
  janitor::tabyl(gender, fraud) |>
  tidyr::gather(key = fraud, value = how_many, no:yes) |>
  ggplot2::ggplot(aes(y = how_many, x = gender, fill = fraud)) +
  geom_col()

注意:使用janitortidyr的管道结果序列更透明,但它本质上复制了使用as.data.frame(table(df))实现的相同结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接