【问题标题】:Overlaying line graph with barplot in ggplot2在ggplot2中用条形图覆盖折线图
【发布时间】:2015-02-12 11:34:31
【问题描述】:

提供了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")

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

【问题讨论】:

  • 添加类似+ stat_summary(fun.data="mean_cl_normal", geom = "line", mapping = aes(group = 1))(未经测试)的内容怎么样?
  • 结果为@​​987654325@

标签: r ggplot2


【解决方案1】:

使用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")

结果:

【讨论】:

  • 非常感谢您的回答。它工作正常,虽然我必须了解你在做什么,因为由于原始数据框要大得多(我们有 72 个变量,而不是 3 个),我似乎无法重现 setnames 行。我想我需要创建一个包含所有 72 个变量的向量,但由于我从未听说过该函数,所以我不确定。我将尝试使用我需要的变量创建一个新的数据框。
  • “setnames”行只是改变了数据的列名。看看之前和之后的数据。这并不难。
  • 我正在重新阅读你的代码,老实说(而且可耻)我几乎不明白你在上面所做的任何事情。我仍然需要学习很多关于 R...
  • by 的行计算出现次数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-06
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
  • 2016-09-20
相关资源
最近更新 更多