Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R ggplot2中带有错误条的分组条形图_R_Ggplot2_Geom Bar_Errorbar_Aesthetics - Fatal编程技术网

R ggplot2中带有错误条的分组条形图

R ggplot2中带有错误条的分组条形图,r,ggplot2,geom-bar,errorbar,aesthetics,R,Ggplot2,Geom Bar,Errorbar,Aesthetics,简介: 我在分组条形图上绘制一些错误条时遇到问题 我正在尝试修改一些最初用于非分组柱状图的代码,我用来制作下图: 问题: 现在我正试图为每个站点绘制多个空气污染物 我正在融合两个独立的数据帧(一个具有平均值,一个具有置信区间),然后将它们连接在一起。我已经成功地制作了一个分组条形图,但是错误条看起来很疯狂 如何正确映射错误条,使其模拟上面的非分组条形图 可复制示例: 请参见下面我的全部数据来源: ## mean values generated from raw data for each p

简介:

我在分组条形图上绘制一些错误条时遇到问题

我正在尝试修改一些最初用于非分组柱状图的代码,我用来制作下图:

问题:

现在我正试图为每个站点绘制多个空气污染物

我正在融合两个独立的数据帧(一个具有平均值,一个具有置信区间),然后将它们连接在一起。我已经成功地制作了一个分组条形图,但是错误条看起来很疯狂

如何正确映射错误条,使其模拟上面的非分组条形图

可复制示例:

请参见下面我的全部数据来源:

## mean values generated from raw data for each pollutant by site:
df.mean <- structure(list(id = structure(1:5, .Label = c("A", "B", "C", "D", "E"), class = "factor"), co_mean = c(0.00965315315315315, 0.201591548253404, 0.180300223214286, 0.14681828358209, 0.136609422703303), no_mean = c(2.09379071379071, 7.17386693309651, 5.11211979166667, 7.070375, 8.84492922564529), no2_mean = c(2.90698198198198, 15.3616940497336, 14.4540014880952, 17.8782126865672, 9.94047529836248), o3_mean = c(0.848970893970894, 19.6143709295441, 18.0919508928571, 19.1743544776119, 23.300829170136)), class = c("tbl_df", "tbl", "data.frame"), .Names = c("id", "co_mean", "no_mean", "no2_mean", "o3_mean"), row.names = c(NA, -5L))

## confidence intervals generated from raw data for each pollutant by site:
df.ci <- structure(list(id = structure(1:5, .Label = c("A", "B", "C", "D", "E"), class = "factor"), co_ci = c(0.00247560132518893, 0.00347796717254879, 0.00376771895817099, 0.025603853701267, 0.00232362415184514), no_ci = c(0.955602056071903, 0.179936357209358, 0.166243603959864, 0.413094097187208, 0.20475667069271), no2_ci = c(0.975169763947207, 0.251717055459865, 0.230073674418165, 0.479358833879918, 0.148588790912564), o3_ci = c(0.22710620006376, 0.283390020715785, 0.279702181925963, 0.754017640698111, 0.376479324970397)), class = c("tbl_df", "tbl", "data.frame"), .Names = c("id", "co_ci", "no_ci", "no2_ci", "o3_ci"), row.names = c(NA, -5L))

## convert each df to long-format:
df.mean.long <- melt(df.mean)
df.ci.long <- melt(df.ci)

## join two long dfs back together for plotting:
df.long.join <- full_join(df.mean.long, df.ci.long, by="id")

## generate confidence intervals relative to each mean:
limits <- aes(ymax = value.x + value.y, ymin = value.x-value.y) ## this is likely the problem!

## create our barplot:
barplot <- ggplot(df.long.join, aes(x=id, y=value.x, fill = variable.x)) + 
    geom_bar(position="dodge", stat="identity") + 
    geom_errorbar(limits, position = "dodge", width = 0.25)

barplot
##根据现场各污染物原始数据生成的平均值:

df.mean您的联接正在添加额外的行,因此也会添加额外的错误条,因为每个数据帧中的
id
的每个级别都有四个匹配的副本。错误条的闪避量也与错误条的闪避量不同

下面的代码对数据进行了造型,以获得所需的连接,并使用镶嵌面来避免需要图例。根据要突出显示的比较,可以切换x变量和镶嵌面变量

为了形成数据,我们的目标是在
id
污染物
上进行连接,因此我们需要以长格式获取每个数据帧,并在每个数据帧中获取常见污染物名称

我们首先使用
gather
(一个
tidyr
函数,本质上相当于
restrape2
包中的
melt
),将
df.mean
放在长格式中<代码>单独的
可以给我们提供一个列,只包含污染物的缩写,没有附加的意思。然后我们去掉了不需要的
mean
列,该列是用
separate
创建的(尽管我们不必这样做)

现在我们对
df.ci
做同样的事情,但是我们也将
value
列的名称更改为
ci
,这样它将不同于我们在
df.mean
中创建的
value

left_join
将两个重塑后的数据帧合并为一个数据帧,以便打印

library(tidyverse)

df.mean %>% 
  gather(key, value, -id) %>% 
  separate(key, c("pollutant", "mean")) %>%
  select(-mean) %>% 
  left_join(df.ci %>% 
              gather(key, value, -id) %>% 
              separate(key, c("pollutant", "ci")) %>% 
              select(id, pollutant, ci=value)) %>% 
  ggplot(aes(x=pollutant, y=value, fill = pollutant)) + 
    geom_bar(position=position_dodge(0.95), stat="identity") + 
    geom_errorbar(aes(ymax=value + ci, ymin=value-ci), position = position_dodge(0.95), width = 0.25) +
    facet_grid(. ~ id) +
    guides(fill=FALSE)

可能是一个dup,谢谢!一旦你指出我的错误,我的错误就显而易见了。然而,解决办法并非如此。我还没有使用tidyverse,但这是一个开始的重要动机!我已经添加了一些额外的代码解释,这是莫名其妙的帮助。谢谢你的跟进!