简体   繁体   English

如何在ggplot2 R中的轴上绘制平均值和误差线

[英]How to draw means and error bars on axes in ggplot2 R

I'd like to plot the means and error bars on the axes of my qplot in R. Here I provide an example of what I mean: 我想在R中的qplot的轴上绘制平均值和误差线。这里我提供了一个我的意思的例子:

绘制轴上的平均值和误差线

As you can see on the axes in yellow are drawn means and error bars. 正如您在黄色轴上看到的那样是绘制平均值和误差线。 I'd like to have that on my qplot. 我想在我的qplot上有这个。

Consider this subset of data: 考虑这个数据子集:

x <- c(2.037820, 3.247560, 1.259053, 4.200520, 1.960179, 6.247880, 2.830693, 5.565390, 4.476610,
   4.627420, 2.500470, 4.156422, 2.855426, 9.210740, 2.663490, 4.412452, 3.270280, 2.838081,
   1.705650, 5.440690, 3.014000, 3.513820, 3.002930, 2.453080, 2.787320, 0.979227, 2.815368);

y <- c(2.855820, 3.332350, 1.991730, 3.688240, 3.565680, 3.525511, 4.451860, 3.233950, 6.125230,
   4.039360, 5.043330, 3.194650, 7.419020, 7.389600, 2.734740, 4.456250, 3.037665, 5.147140,
   3.184790, 3.595890, 5.457550, 1.527680, 2.848046, 1.418289, 3.996330, 4.516640, 2.884100);

fp <- qplot(x, y) + annotate("segment", x=-Inf, xend=Inf,y=-Inf, yend=Inf);
ggExtra::ggMarginal(fp, type = "density", margins = 'both')

It should give you a plot like this: 它应该给你一个这样的情节:

点击这里查看情节

Now, how do I draw my means and error bars? 现在,我如何绘制我的手段和错误栏? the axes() used in the basic plots in R doesn't work in ggplot2. R中基本图中使用的轴()在ggplot2中不起作用。

I appreciate any suggestion, even if it requires to change packages or approach the problem differently. 我感谢任何建议,即使它需要更改包或以不同方式处理问题。

Thank you! 谢谢!

Maybe not exactly what you are looking for, but might be a startingpoint for you to continu working on: 也许不完全是您正在寻找的东西,但可能是您继续努力的起点:

require(ggplot2)
require(dplyr)

df <- data.frame(x = x, y = y)


dferrx <- df %>%
  summarise(m = mean(x),
            lo = m - 1.96 * sd(x)/sqrt(n()),
            hi = m + 1.96 * sd(x)/sqrt(n()),
            x = m)

dferry <- df %>%
  summarise(m = mean(y),
            lo = m - 1.96 * sd(y)/sqrt(n()),
            hi = m + 1.96 * sd(y)/sqrt(n()),
            y = m)


ggplot(df, aes(x = x, y = y)) + 
  geom_point() +
  annotate("segment", x=-Inf, xend=Inf,y=-Inf, yend=Inf) +
  geom_errorbar(data = dferry, aes(x = 0, ymin = lo, ymax = hi)) +
  geom_errorbarh(data = dferrx, aes(y = 0, xmin = lo, xmax = hi))

You might have already solved it, but, just in case, here is the code for an error bar for each point, following Wietze314's contribution: 你可能已经解决了它,但是,以防万一,这里是每个点的错误栏的代码,遵循Wietze314的贡献:

library(tidyverse)

example_DF <- tibble(x = c(2.037820, 3.247560, 1.259053, 4.200520, 1.960179, 6.247880, 2.830693, 5.565390, 4.476610,
                       4.627420, 2.500470, 4.156422, 2.855426, 9.210740, 2.663490, 4.412452, 3.270280, 2.838081,
                       1.705650, 5.440690, 3.014000, 3.513820, 3.002930, 2.453080, 2.787320, 0.979227, 2.815368),
                 y = c(2.855820, 3.332350, 1.991730, 3.688240, 3.565680, 3.525511, 4.451860, 3.233950, 6.125230,
                       4.039360, 5.043330, 3.194650, 7.419020, 7.389600, 2.734740, 4.456250, 3.037665, 5.147140,
                       3.184790, 3.595890, 5.457550, 1.527680, 2.848046, 1.418289, 3.996330, 4.516640, 2.884100))


dferrx <- example_DF %>%
  summarise(m = mean(x),
            lo = m - 1.96 * sd(x)/sqrt(n()),
            hi = m + 1.96 * sd(x)/sqrt(n()),
            x = m)

dferry <- example_DF %>%
  summarise(m = mean(y),
            lo = m - 1.96 * sd(y)/sqrt(n()),
            hi = m + 1.96 * sd(y)/sqrt(n()),
            y = m)


ggplot(example_DF, aes(x = x, y = y)) + 
  geom_point() +
  annotate("segment", x=-Inf, xend=Inf,y=-Inf, yend=Inf) +
  geom_errorbar(aes(ymin =y -dferry$lo, ymax = y+ dferry$hi))+
  geom_errorbarh(aes(xmin =x -dferrx$lo, xmax = x+ dferrx$hi))

在此输入图像描述

It would benefit from a lot of esthetic tinkering, but there it is. 它会从很多美学修补中受益,但它确实存在。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM