【问题标题】:2 series barplot ggplot2 or Openair2 系列 barplot ggplot2 或 Openair
【发布时间】:2018-11-10 01:39:34
【问题描述】:

我正在尝试创建空气质量数据的条形图。我想要 X 轴上的监测站点,以及在每个站点测量的 2 种污染物浓度相对于 y 轴,例如在伦敦现场,我测量了 5 ng/m3 的锑(系列 1)和 10 ng/m3 的钡(系列 2)。所以 y 轴就是浓度 (ng/m3)。

我已经搜索过了,如果第二个系列是可以由颜色定义的定性属性,那么获得第二个系列的唯一示例似乎有效,因此您仍然只有一个栏而不是两个。

另外的例子似乎涉及手动在代码中输入数据框,但我有很多数据,想导入文件。我已成功从 csv 导入,但在代码中看不到如何引用它。

Openair 似乎只用 timeProp 绘制必须与 X 轴上的日期相关的堆积条形图。

对不起,我对这样的编程非常缺乏经验,我希望我的问题是有道理的。任何帮助表示赞赏!

【问题讨论】:

  • 欢迎来到 SO!您能否提供一些示例数据或使用dput() 的数据,并更具体地了解您想要的情节是什么样的?
  • 你要求绘制时间序列数据?
  • 我不想绘制时间序列数据。抱歉,我可以附加文件以在 Excel 中显示数据和绘图吗?
  • > glimpse(Sb_Ba) Observations: 24 Variables: 4 $ Site "London Marylebone Road", "Swansea Morriston", "Belfast Centre",... $ Designation "Urban交通”、“城市交通”、“城市背景”、“城市背景... $ Sb 5.250, 2.990, 1.060, 2.400, 0.999, 1.650, 1.700, 0.947, 0.955, 1.... $ Ba 35.700, 13.000, 3.630, 6.530, 4.500, 7.700, 9.390, 1.580, 3.030, ...
  • 示例图:projects.ncsu.edu/labwrite/res/gt/gt-bar-home.html 在创建具有两个自变量的条形图下。我将有监测站点而不是哺乳动物,浓度而不是计数和锑和钡而不是第 1 周和第 2 周

标签: r ggplot2 openair


【解决方案1】:

我认为你需要这样的东西:

library(ggplot2)

data <- data.frame(cite= c('london','madrid','barcelona','london','madrid','barcelona'),
               contaminent = c('Argon','Argon','Argon','Barium','Barium','Barium'),
               Concentration= runif(6)*5)

ggplot() + geom_col(data = data,aes(x = cite,y=Concentration,fill=contaminent))

编辑:

现在假设您的数据名称为 my_data 并按如下方式组织:第一列名称 cites 和 cites 名称,然后每列的名称是一个污染,其中包含每个 cite 的污染浓度值。那么您用于管理数据并在 ggplot 中使用的代码可能是:

library(ggplot2)
new_data <- data.frame(cites = rep(my_data$cites,ncol(my_data)-1),
                       contaminent_type= rep(colnames(my_data)[2:ncol(my_data)],each=nrow(my_data)),
                       Concentration= as.vector(my_data[,2:ncol(my_data)]))

ggplot() + geom_col(data = new_data,aes(x = cites,y=Concentration,fill=contaminent_type))

【讨论】:

  • 谢谢圣地亚哥。所以我必须列出每个站点两次,每种污染物一次?我有 25 个网站!这确实说明了我的观点:我已将数据导入为 csv,但似乎仍需要大量代码才能将其用于简单的条形图。
  • GGPLOT 确实可以增强情节,但根据我的经验,需要更多代码和大量经验才能快速轻松地完成。我将编辑帖子以更轻松地重新组织您的数据。
  • 嗨圣地亚哥,我已经尝试了你更新的代码,它返回了这个错误:“as.vector 中的错误(as.numeric(Sb_Ba[, 2:ncol(Sb_Ba)])):(列表) 对象不能被强制输入'double'"(Sb_Ba 是我的数据框)。我试过用谷歌搜索这个错误 - 是因为我的网站名称不是数字吗?
  • 澄清一下,我的数据框是 3 列,“Site”(名称列表)、“Sb”和“Ba”(都是测量浓度列表 - 数值)
  • data.frame(c("c("伦敦马里波恩路", "斯旺西莫里斯顿", "贝尔法斯特中心")", "c(5.25, 2.99, 1.06)", "c(35.7 , 13, 3.63)")
猜你喜欢
  • 2017-11-22
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 2020-10-14
  • 2014-04-18
  • 2015-05-13
  • 2020-07-16
  • 2021-05-28
相关资源
最近更新 更多