ggplot用于多个类别变量-计数数据

时间:2018-08-07 14:39:25

标签: r ggplot2 dplyr categorical-data

与往常一样,这个论坛是我找到问题的最后的希望。 我正在研究一个数据集,其中一些参与者(儿童)接受了一项干预计划,以提高他们的社交技能/态度。在治疗之前,所有参与者都观看了一段视频片段,其中发生了“足球比赛”,“篮球”和“斯诺克”,而演员则是“好斗”,“自信”或“中立”。

所有参与者回答演员的行为是“错误”,“正确”还是“我不知道”。干预后,他们看到了相同的视频,不得不说动作是“错误”,“正确”还是“我不知道”。

我们希望-在干预计划结束后,参与者将对所有情况的“肯定”行为说“对”,对所有情况下的“攻击性”行为说“对”。

我正在使用麦克纳马克测验方法来解决这个问题,但是我在绘制漂亮的图形时遇到了一些困难,我真的认为这个论坛社区将帮助我了解正在发生的事情。

以下代码有效,并且是可复制的示例,并且针对每种情况回答问题-发明后,哪种态度增加/减少了。

library(tidyverse)
set.seed(123)
ds <- data.frame(ID=seq.int(nrow(ds)),
                 situation=rep(c("Soccer","Basketball","snooker"),20),
                 attitude=c("aggressive","assertive","neutral"),
                 response_t1=c("wrong","Right","I Don't"),
                 response_t2=rep(c("wrong","Right","I Don't"), times=c(10,35,15)))

ds %>% 
  gather(key="Time",value, response_t1:response_t2) -> j

j  %>% 
  group_by(attitude, Time, situation, value) %>% 
  summarise(n = n()) %>% 
  ggplot(., aes(x = value, y = n, fill=Time)) + 
  geom_bar(stat = "identity", width=0.5, position = position_dodge(width=0.6)) +
  facet_wrap(~ situation*attitude, ncol = 3) 

Valid XHTML

如您所见,该图几乎是可以的,但是,各个条的宽度不同

两个问题:您是否建议另一种图形方法?您是否建议另一种统计方法?

这张图here非常有趣 https://imgur.com/a/lyQB11E

1 个答案:

答案 0 :(得分:2)

您可以使用选项wantsLayer = true在任何地方获得相同的条形宽度

preserve = "single"

reprex package(v0.2.0.9000)于2018-08-07创建。