R ggpubr Boxplot, добавляющий метку сводной статистики к динамической оси Y

Я хотел бы добавить сводную статистику на блочной диаграмме при максимальной динамической оси y.

В реальных данных ось y представляет собой динамический раскрывающийся список, одно значение находится в диапазоне от 0 до 6; а другой от 0 до 100. В приведенном ниже примере я жестко закодировал, где я хотел бы, чтобы метки были, но я не могу жестко закодировать их в реальных данных.

Есть ли способ:

Установить метки за пределами графика над осью Y? Чтобы метки не сдвинулись даже при смене оси?

Или есть способ установить максимальное значение Y + n?

Пример:

# library
library(ggplot2)
library(ggpubr)

# create a data frame
variety=rep(LETTERS[1:7], each=40)
treatment=rep(c("high","low"),each=20)
note=seq(1:280)+sample(1:150, 280, replace=T)
data=data.frame(variety, treatment ,  note)

# grouped boxplot
ggplot(data, aes(x = variety, y = note, fill = treatment)) +
  geom_boxplot() +
  scale_fill_manual(values = c("#79AAB9", "#467786")) +
  stat_compare_means(aes(group = treatment), label = "p.format") +
  stat_summary(
    fun.data = function(x)
      data.frame(y = 460, label = paste(round(median(
        x
      ), 1))),
    geom = "text",
    aes(group = treatment),
    hjust = 0.5,
    position = position_dodge(0.9)
  ) +
  stat_summary(
    fun.data = function(x)
      data.frame(y = 445, label = paste("n", length(x))),
    geom = "text",
    aes(group = treatment),
    hjust = 0.5,
    position = position_dodge(0.9)
  ) +
  expand_limits(y = 100)

Пример блочной диаграммы

Большое спасибо за любую помощь заранее.


person Keelin    schedule 11.05.2020    source источник
comment
‘label.y=inf’? Посмотрите на некоторые варианты здесь для идей. Мне очень нравится ggpmisc для подобных вещей.   -  person Mark Neal    schedule 11.05.2020
comment
Спасибо @MarkNeal, это действительно полезно. Мне удалось заставить приведенный выше пример работать с INF. Я не знал об этом раньше, очень благодарен за ваше время.   -  person Keelin    schedule 12.05.2020
comment
Рад, что это помогло. Не забывайте голосовать за комментарии и ответы, которые особенно полезны.   -  person Mark Neal    schedule 12.05.2020


Ответы (1)


Удалось получить следующую работу с предложением от @MarkNeal

# library
library(ggplot2)
library(ggpubr)

# create a data frame
variety=rep(LETTERS[1:7], each=40)
treatment=rep(c("high","low"),each=20)
note=seq(1:280)+sample(1:150, 280, replace=T)
data=data.frame(variety, treatment ,  note)

# grouped boxplot
ggplot(data, aes(x = variety, y = note, fill = treatment)) +
  geom_boxplot() +
  scale_fill_manual(values = c("#79AAB9", "#467786")) +
  stat_compare_means(aes(group = treatment), label = "p.format", vjust = 3) +
  stat_summary(
    fun.data = function(x)
      data.frame(y= Inf, label = paste(round(median(
        x
      ), 1))),
    geom = "text",
    aes(group = treatment),
    hjust = 0.5, vjust = 1,
    position = position_dodge(0.9)
  ) +
  stat_summary(
    fun.data = function(x)
      data.frame(y = Inf, label = paste("n", length(x))),
    geom = "text",
    aes(group = treatment),
    hjust = 0.5, vjust = 2,
    position = position_dodge(0.9)
  )

введите здесь описание изображения

person Keelin    schedule 12.05.2020