首页 > 解决方案 > R:如何在 rmarkdown 中最好地可视化“是/否/不确定”

问题描述

我是 R 的初学者。我在调查rmarkdown中使用 编写报告时遇到了困难ggplot。目前样本量很小。我开始思考——考虑到三个答案可能是“是”、“”、“不确定”,我如何才能最好地形象化答案,我希望读者一眼就知道所有三个答案都是可能的,但有些选项是没有选择。下面重现了我当前针对该问题的数据:

df.YesNoUncertain <- data.frame(
  X = sample(c("Yes", "No"), 11, replace = TRUE, prob = c(.99,.001)),
  Y = sample(c("Yes", "No"), 11, replace = TRUE, prob = c(.9,.2)),
  stringsAsFactors = F
)

我想到了饼图,但是没有显示未选择的答案(“不确定”)。也许有更好的方法来做到这一点?

标签: rggplot2

解决方案


我不喜欢饼图(出于不同的原因,请参阅这篇文章),那么这样的东西怎么样?

df.YesNoUncertain %>%
    gather(Group, Response) %>%
    mutate(Response = factor(Response, levels = c("Yes", "No", "Uncertain"))) %>%
    count(Group, Response) %>%
    complete(Group, Response, fill = list(n = 0)) %>%
    ggplot(aes(Response, n, fill = Group)) + geom_col(position = "dodge")

在此处输入图像描述

读者可以很容易地识别零计数响应,例如在“X”组中有零个“否”响应,而在两组中都有零个“不确定”响应。


更新

要显示百分比,您可以执行以下操作

df.YesNoUncertain %>%
    gather(Group, Response) %>%
    mutate(Response = factor(Response, levels = c("Yes", "No", "Uncertain"))) %>%
    count(Group, Response) %>%
    complete(Group, Response, fill = list(n = 0)) %>%
    group_by(Group) %>%
    mutate(Percentage = n / sum(n) * 100) %>%
    ggplot(aes(Response, Percentage, fill = Group)) + geom_col(position = "dodge")

在此处输入图像描述

或者,您也可以使用scales::percent,例如ggplot replace count with percent in geom_bar


推荐阅读