Как нарисовать средние и погрешности на осях в ggplot2 R - PullRequest
0 голосов
/ 14 февраля 2019

Я хотел бы построить средние значения и столбцы ошибок на осях моего qplot в R. Здесь я приведу пример того, что я имею в виду:

plot with means and error bars on the axes

Как видно на осях, желтым цветом обозначены средние и столбцы ошибок.Я хотел бы иметь это на моем qplot.

Рассмотрим это подмножество данных:

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')

Это должно дать вам график, подобный этому:

click here to see the plot

Теперь, как мне нарисовать мои средства и панели ошибок?оси (), используемые на основных графиках в R, не работают в ggplot2.

Я ценю любое предложение, даже если оно требует изменения пакетов или решения проблемы по-другому.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Возможно, вы уже решили эту проблему, но, на всякий случай, вот код строки ошибок для каждой точки, следуя вкладу 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))

enter image description here

Это выиграет от лота эстетической обработки, но это так.

0 голосов
/ 14 февраля 2019

Может быть, не совсем то, что вы ищете, но может быть отправной точкой для продолжения работы:

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))
...