我对外交政策的态度有几个类似的调查问题,包括叙利亚(syria_threat),朝鲜(nk_threat)和英国退欧(Brexit)。每个响应都被编码为一个因素:“无威胁”,“轻微威胁”,“中度威胁”,“高度威胁”和“严重威胁”。下面给出了一个最小的数据示例
#Reading the data#
syria_threat<-c("High Threat", "Slight Threat", "Slight Threat", "Medium Threat")
nk_threat<-c("Grave Threat", "Grave Threat", "High Threat", "Medium Threat")
brexit<-c("Medium Threat", "Slight Threat", "Slight Threat", "No Threat")
data<-cbind.data.frame(syria_threat, nk_threat, brexit)
#Showing the structure of the data
data
syria_threat nk_threat brexit
1 High Threat Grave Threat Medium Threat
2 Slight Threat Grave Threat Slight Threat
3 Slight Threat High Threat Slight Threat
4 Medium Threat Medium Threat No Threat
我想创建一堆直方图密度图,可视化每个威胁/危机的感知威胁。因此,对于每个问题(叙利亚,朝鲜和英国退欧),我会有一个从无威胁到坟墓的直方图叠加在另一个上面。并非所有问题都具有相同的价值(即没有人将英国退欧视为“严重威胁”)。我希望它看起来像这个问题的答案Multiple histograms in ggplot2(但直方图条旋转90度https://i.stack.imgur.com/3CPOS.png)。
我使用以下代码:
ggplot(melt(data), aes(x=as.factor(value), fill=as.factor(value))) +
geom_bar() + xlab("") +
scale_fill_discrete("Threat")
我收到以下错误消息:
Using syria_threat, nk_threat, brexit as id variables
Error in is.factor(x) : object 'value' not found
任何帮助将不胜感激。谢谢!
答案 0 :(得分:1)
因此,对于每个问题(叙利亚,朝鲜和英国脱欧),我都会有一个从无威胁到坟墓的直方图叠加在另一个上面。
基于此,我认为您需要以下内容:
library(tidyverse)
# Converting factors to characters
data[] <- lapply(data, as.character)
data %>%
gather(key, value) %>%
group_by(key, value) %>%
mutate(count = n()) %>%
distinct() %>%
ggplot(aes(value, count, fill = value)) +
geom_col(position = position_dodge()) +
facet_wrap(~ key, ncol = 1) +
coord_flip() +
scale_x_discrete(limits = c("No Threat",
"Slight Threat",
"Medium Threat",
"High Threat",
"Grave Threat")) +
theme_bw() +
theme(
text = element_text(family = "Source Code Pro"),
panel.grid.minor = element_blank(),
panel.grid.major.y = element_blank()
)
注意:我使用tidyr
代替reshape2
,因为tidyr
旨在取代reshape2
。另外,如果您不想要它们,请忽略/修改主题组件(例如,您可能没有安装源代码专业版字体)。