首页 > 解决方案 > 如何在 ggplot / R 中制作此直方图?

问题描述

请在My data q下面找到。

我有两个协变量:对应于五项不同的研究q$Studieq$best.resp每项研究都报告了某种治疗后获得的最佳反应。

q$best.resp有三个级别

table(q$best.resp)

 0  1  2 
62 42  2  

我想生成一个直方图,说明每一项q$best.respq$Studie所有研究的组合(对应于table(q$best.resp)

我已经绘制了这个例子,说明我希望情节看起来如何。不幸的是,我没有通过手册成功。

在此处输入图像描述

我更喜欢 ggplot2 中的解决方案。请注意,所有研究都只有q$best.resp==0q$best.resp==1- 除了q$Studie==5,单独有两个案例q$best.resp==2

My data 
q <- structure(list(Studie = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L), best.resp = c(0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 
1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 
0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 
1L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 2L, 0L, 2L)), .Names = c("Studie", 
"best.resp"), class = "data.frame", row.names = c(NA, -106L))

标签: rggplot2histogram

解决方案


你可以尝试一个tidyverse

library(tidyverse)
q %>% 
  as_tibble() %>% 
  mutate(Studie=as.character(Studie),
         best.resp =as.factor(best.resp)) %>% 
  bind_rows(., mutate(., Studie="all")) %>% 
  count(Studie, best.resp) %>% 
  ggplot(aes(Studie, n, fill= best.resp)) + 
   geom_col(position = position_dodge2(preserve = "single"))

在此处输入图像描述


推荐阅读