在ggplot2中用barplot覆盖线图

时间:2015-02-12 11:34:31

标签: r ggplot2

提供了the following数据框(见下文),该数据框是从调查问卷中提取的,询问了来自不同社区的人的安全感,我设法创建了一个条形图,显示每个社区的感知安全性和群体结果:

questionnaire_raw = read.csv("https://www.dropbox.com/s/l647q2omffnwyrg/local.data.csv?dl=0")

ggplot(data = questionnaire_raw, 
       aes(x = factor(Seguridad.de.tu.barrio..de.día.), # We have to convert x values to categorical data
           y = (..count..)/sum(..count..)*100,
           fill = neighborhoods)) + 
  geom_bar(position="dodge") + 
  ggtitle("Seguridad de día") + 
  labs(x="Grado de seguridad", y="% encuestados", fill="Barrios")

enter image description here

我想用一个线图来覆盖这些结果,这个线图表示所有邻域中的每个安全类别(1,2,3或4)的平均值(这是没有分组结果),因此很容易知道是否特定社区超过或低于所有社区的平均值。但是,由于这是我在R上的第一份工作,我不知道如何使用数据框计算该平均值,然后将其覆盖在上一个条形图中。

1 个答案:

答案 0 :(得分:4)

使用data.table进行数据操作和lukeA的评论:

require(ggplot2)
require(data.table)
setDT(questionnaire_raw)
setnames(questionnaire_raw, c("Timestamp", "Barrios", "Grado"))

plot_data <- questionnaire_raw[,.N, by=.(Barrios,Grado)]
ggplot(plot_data, aes(x=factor(Grado), y = N, fill = Barrios)) +
  geom_bar(position="dodge", stat="identity") +
  stat_summary(fun.y=mean, geom = "line", mapping = aes(group = 1)) +
  ggtitle("Seguridad de día") + 
  labs(x="Grado de seguridad", y="% encuestados", fill="Barrios")

结果: enter image description here