Средства построения графиков на гистограммах, созданных с помощью facet_wrap - PullRequest
0 голосов
/ 23 мая 2018

Я делаю несколько гистограмм, используя ggplot2 и facet_wrap, и хотел бы вывести среднее значение на каждой панели.Ниже я создаю фиктивный фрейм данных, нахожу среднее значение для каждого фасета, а затем создаю графики, добавляя среднее значение, используя geom_point.

# Load libraries 
library(tidyverse)

# Toy data frame
df <- data.frame(ID = sample(letters[1:3], 100, replace = TRUE), n = runif(100))

# Mean value of each group
df_mean <- df %>% group_by(ID) %>% summarise(mean = mean(n))

# Plot histograms
ggplot(df) + 
  geom_histogram(aes(n)) + 
  facet_wrap(~ID) +
  geom_point(data = df_mean, aes(x = mean, y = Inf))

enter image description here

Я использовал y = Inf, чтобы поместить точку вверху каждой грани, но - как вы можете видеть - она ​​несколько обрезана.Я хотел бы подтолкнуть его вниз, чтобы он был полностью виден.Насколько мне известно, geom_point не имеет аргумента nudge_y или vadj, а 0.7 * Inf явно бессмысленен.Я также попытался добавить position = position_nudge(y = -5) в качестве аргумента к geom_point, но это, похоже, не имеет никакого эффекта.В качестве обходного пути я даже попытался использовать geom_text и указать nudge_y, но - как и решение position_nudge - он не оказал заметного эффекта.Есть ли простой способ сделать это во время черчения или мне просто нужно вычислить значение y перед построением?

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Если вы в порядке с geom_text/label(), вы можете использовать аргумент vjust, чтобы сделать это:

ggplot(df) + 
    geom_histogram(aes(n)) + 
    facet_wrap(~ID) +
    geom_text(data = df_mean, aes(x = mean, y = Inf),
              label = "Mean", vjust = 1)

enter image description here

Я используюэто все время для плавающего процентного изменения или p-значений в верхней части панели, и вам не нужно ничего вычислять, ggplot получил вас.

0 голосов
/ 23 мая 2018
# Load libraries 
library(tidyverse)

# Toy data frame
df <- data.frame(ID = sample(letters[1:3], 100, replace = TRUE), n = runif(100))

# Mean value of each group
df_mean <- df %>% group_by(ID) %>% summarise(mean = mean(n))

# Get max count using the dataframe that stores ggplot info
ggplot(df) + 
  geom_histogram(aes(n)) + 
  facet_wrap(~ID) -> p

# Plot histograms and plot mean in the right place
p + geom_point(data = df_mean, aes(x = mean, y = max(ggplot_build(p)$data[[1]]$count)))

enter image description here

Ключ здесь состоит в том, чтобы узнать максимальное значение счетчика, потому что это будет вашим верхним значением оси y для ваших гистограмм.Вы можете получить эту информацию с помощью функции ggplot_build и использовать ее для построения ваших точек в нужном месте.

Конечно, вы можете пойти немного выше максимального значения в случае, если точка падает на одну избары, как это y = 0.2 + max(ggplot_build(p)$data[[1]]$count))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...