首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在分面图中向单个点添加错误条

在分面图中向单个点添加错误条
EN

Stack Overflow用户
提问于 2016-08-01 19:50:41
回答 1查看 94关注 0票数 0

我试图用一个数据显示一个变量是如何作为另一个变量的函数变化的。每个变量都有一个与其关联的错误。下面是我拥有的数据的子集: ID列、变量(SiO2到FeO)以及与变量(*_2stdev)关联的错误:

代码语言:javascript
复制
df<-structure(list(ID = structure(c(3L, 4L, 6L, 1L, 2L, 10L), .Label = c("P466-an1", "P466-an2", "P468-an1", "P468-an2", "P469-an1", "P470-an1", "P471-an1", "P472-an1", "P473-an1", "P474-an1", "P475-an1", "P475-an2", "P476-an1", "P476-an2", "P477-an1", "P478-an1", "P479-an1", "P480-an1"), class = "factor"), 
           SiO2 = c(54.5147, 56.2223, 52.8499, 52.0293, 53.4221, 52.9802), 
           TiO2 = c(0.5928, 0.5792, 0.5771, 1.1373, 1.0962, 1.1535), 
           Al2O3 = c(17.5404, 18.1921, 19.4737, 15.7752, 16.455, 16.4117), 
           FeO = c(6.2115, 5.8676, 5.4874, 4.5952, 4.4242, 4.109), 
           SiO2_2stdev = c(1.5232, 2.3578, 0.6374, 1.3331, 0.6535, 0.6977), 
           TiO2_2stdev = c(0.0638, 0.0637, 0.0357, 0.1024, 0.0422, 0.0282), 
           Al2O3_2stdev = c(0.4519, 0.4572, 0.2044, 0.6378, 0.6546, 0.0624), 
           FeO_2stdev = c(0.426, 0.3973, 0.1145, 0.1992, 0.1106, 0.0427)), 
          .Names = c("ID", "SiO2", "TiO2", "Al2O3", "FeO", "SiO2_2stdev", "TiO2_2stdev", "Al2O3_2stdev", "FeO_2stdev"), 
          row.names = c(NA, 6L), class = "data.frame")

使用以下代码:

代码语言:javascript
复制
library(reshape2)
library(ggplot2)

m.df<-melt(df, id=c('ID','FeO'))

p<-ggplot(subset(m.df, variable %in% c('SiO2','TiO2','Al2O3')),aes(x=value, y=FeO))+
   geom_point()+
   facet_wrap(~ variable, ncol=1, scales="free_x")+
   theme_bw()

p

我知道这个情节:

我想添加错误条(垂直和水平)到这个,但我不知道如何在一个面的情节。

使用geom_errorbargeom_errorbarh,我能够从未熔掉的数据from中为单个图绘制这些图。我想我可以用一个循环来制作所有的情节,但是我不知道如何用这个方法来添加错误条。此外,我想一次看到所有的情节。

感谢您的阅读,并对您的帮助表示极大的感谢!-R

根据史密斯的评论,编辑,我在melt中的ID变量中添加了FeO_2stdev。我现在可以用correc垂直错误条制作一个情节。因此,现在我很难理解如何让geom_errorbarh为每个图绘制正确的错误条。

下面是我正在使用的更新代码,以及生成的图。

代码语言:javascript
复制
library(reshape2)
library(ggplot2)

m.df<-melt(df, id=c('ID','FeO', 'FeO_2stdev'))
m.df$y.min<-m.df$FeO-m.df$FeO_2stdev
m.df$y.max<-m.df$FeO+m.df$FeO_2stdev

p<-ggplot(subset(m.df, variable %in% c('SiO2','TiO2','Al2O3')), aes(x=value, y=FeO))+
   geom_point()+
   facet_wrap(~ variable, ncol=1, scales="free_x")+
   theme_bw()+
   geom_errorbar(aes(ymin=y.min, ymax=y.max))

p

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-01 21:18:23

拥有一列值和一列2标准偏差的数据集将有助于处理水平错误条。这本质上是一个数据操作问题。要实现这一目标,有许多方法。我在用tidyr和dplyr。

例如,如果在熔化后立即开始使用m.df,则可以

  1. 创建一个新变量来表示行是表示2个标准差还是使用separate表示值,然后使用if_else表示mutate
  2. spread数据集返回到一个宽格式,其中一个列表示值,另一个列表示两个标准差。如果您已经熟悉dcast,也可以使用来自reshape2的它。

图书馆(Dplyr)库(Tidyr)

代码语言:javascript
复制
m.df %>%
    separate(variable, c("variable", "metric")) %>%
    mutate(metric = if_else(is.na(metric), "value", metric)) %>%
    spread(metric, value)

         ID    FeO FeO_2stdev variable 2stdev   value
1  P466-an1 4.5952     0.1992    Al2O3 0.6378 15.7752
2  P466-an1 4.5952     0.1992     SiO2 1.3331 52.0293
3  P466-an1 4.5952     0.1992     TiO2 0.1024  1.1373
4  P466-an2 4.4242     0.1106    Al2O3 0.6546 16.4550
5  P466-an2 4.4242     0.1106     SiO2 0.6535 53.4221
...

下面是使用来自tidyr的gather而不是melt实现相同结果的整个过程:

代码语言:javascript
复制
df2 = df %>%
    gather(key, value, -ID, -contains("FeO")) %>%
    separate(key, c("variable", "metric")) %>%
    mutate(metric = if_else(is.na(metric), "value", metric)) %>%
    spread(metric, value)

现在,可以使用value2stdev将水平错误条添加到绘图中。注意,列名2stdev在语法上是不正确的,所以我在变量名周围使用backticks。

代码语言:javascript
复制
ggplot(df2, aes(x=value, y=FeO))+
    geom_point()+
    facet_wrap(~ variable, ncol=1, scales="free_x")+
    theme_bw() +
    geom_errorbar(aes(ymin = FeO - FeO_2stdev, ymax = FeO + FeO_2stdev)) +
    geom_errorbarh(aes(xmin = value - `2stdev`, xmax = value + `2stdev`))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38707015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档