В ggplot
вы можете явно контролировать эти отсечки, установив их при вызове.
ggplot() +
geom_boxplot(
aes(x = 1
, lower = min(x)
, middle = median(x)
, upper = max(x)
, ymin = min(x)
, ymax = max(x))
, stat = "identity"
)
Если у вас есть более чем одну группу, вы, вероятно, хотите, чтобы рассчитать эти пункты по отдельности первым. Здесь, используя dplyr
iris %>%
group_by(Species) %>%
summarise(min = min(Petal.Length)
, max = max(Petal.Length)
, median = median(Petal.Length)
) %>%
ggplot() +
geom_boxplot(
aes(x = Species
, lower = min
, middle = median
, upper = max
, ymin = min
, ymax = max)
, stat = "identity"
)
Если вы хотите добавить «легенду» вы, возможно, придется сделать немного больше регулировки. Однако с cowplot
относительно просто создать график, помеченный так, как вам хотелось бы, а затем использовать его в качестве легенды. Ниже я создаю тот же самый блокнот, что и выше (но сохраняю его в переменной) и создаю новый график, который будет служить легендой (при необходимости измените).
basePlot <-
iris %>%
group_by(Species) %>%
summarise(min = min(Petal.Length)
, max = max(Petal.Length)
, median = median(Petal.Length)
) %>%
ggplot() +
geom_boxplot(
aes(x = Species
, lower = min
, middle = median
, upper = max
, ymin = min
, ymax = max)
, stat = "identity"
)
legendPlot <-
data.frame(lower = 1, middle = 2, upper = 3) %>%
ggplot(
aes(x = 1
, lower = lower
, middle = middle
, upper = upper
, ymin = lower
, ymax = middle
)
) +
# ggtitle("Legend") +
geom_boxplot(stat = "identity") +
scale_y_continuous(
name = ""
, breaks = 1:3
, labels = c("Minimum", "Median", "Maximum")
) +
scale_x_continuous("Legend", position = "top") +
theme(axis.text.x = element_blank()
, axis.title.x = element_text(face = "bold"))
Тогда нагрузка cowplot
(обратите внимание, что я переустановить тему, потому что cowplot
автозагрузок свою собственную тему и я не заботиться о нем) и создать макет, используя plot_grid
. Обратите внимание, что здесь я создаю два отдельных столбца, чтобы сделать легенду меньшей и вертикально центрированной. Вы можете поиграть с rel_widths
и rel_heights
, если хотите отрегулировать детали. (scale
вариант тоже, но мне не понравилось, как он работал с rel_widths
.)
library(cowplot)
theme_set(theme_minimal())
plot_grid(
basePlot
, plot_grid(
ggplot()
, legendPlot
, ggplot()
, ncol = 1
)
, rel_widths = c(1, 0.33)
)
дает
Есть ли другой способ вычисления значения заранее, чем делать это с dplyr и%>%? Кажется, не работает для меня ... – ChrM
Возможно. Вероятно, это отдельный вопрос, но 'by', скорее всего, заставит вас начать. Что значит «Кажется, не работает»? –
Это прекрасно работает. Есть ли способ распечатать настроенное поле в полях и добавить некоторые аннотации в мин/медиана/макс. Поскольку это настраиваемая коробка, я хотел бы добавить некоторую информационную информацию, чтобы сделать ее понятной для других людей. – ChrM