Некоторые улучшения boxplot

#r #ggplot2 #boxplot

#r #ggplot2 #boxplot

Вопрос:

У меня есть одна проблема, которую я не могу решить. Допустим, у меня есть следующий код :

 x<-rnorm(100)
x<-append(x,5)
ggplot() geom_boxplot(aes(y=x),width=3) scale_y_continuous(breaks=round(c(median(x),summary(x)[['1st Qu.']],summary(x)[['3rd Qu.']],max(x),min(x)),digits=2))
  

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

Как вы можете видеть выше, этот boxplot огромен! Как я могу изменить его ширину? Как вы можете видеть выше, я пытался сделать это с помощью команды width , но это не сработало (что для меня очень странно, потому что я прочитал несколько сообщений об этом, и width команда работала.

Второе, что я хочу сделать, это отметить значения, которые имеют отношение к boxplot (как медиана, 1-й квантиль, 3-й квантиль, max, min), но я хочу, чтобы всегда была отмечена верхняя часть стика ( max() например, будет отмечен выброс, если он существует). Как вы можете видеть выше, выброс отмечен max() функцией, но верхняя часть верхнего стика не отмечена. Есть ли какой — нибудь способ , как мы можем это сделать ? Я попытался сделать это, добавив в breaks=() команду :

  ifelse(max(x)>(3/2*summary(x)[['3rd Qu.']]),max(x[x<3/2*summary(x)[['3rd Qu.']]]),"")
  

Но это не работает. Моя интуиция заключалась в следующем: если существует выброс (условие), то отметьте верхнюю часть стика, которая является ближайшим значением к 3/2 * 3-му квантилю. Есть ли какой-либо способ, как мы можем решить эти две проблемы?

Комментарии:

1. Как вы экспортируете график из R?

2. Экспорт -> Сохранить как изображение

Ответ №1:

Вы можете попробовать:

 set.seed(123)

x <- rnorm(100)
x <- append(x,5)

my_breaks <- summary(x)[-4] %>% as.numeric()
my_range <- my_breaks[c(2,4)]   (my_breaks[c(2,4)] %>% diff() * 3/2) * c(-1, 1)
my_breaks <- c(my_breaks, x[x >= my_range[1] amp; x <= my_range[2]] %>% range())

data <- data.frame(group = factor(0), y = x)

ggplot(data) 
  geom_boxplot(aes(group, y), width = 0.25)  
  labs(x = NULL)  
  scale_y_continuous(breaks = round(my_breaks, 2))  
  theme(
    axis.title.x=element_blank(),
    axis.text.x=element_blank(),
    axis.ticks.x=element_blank()
  )
  

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

Комментарии:

1. Именно то, что я искал! Спасибо ;)) По просьбе мы также должны использовать библиотеку (dplyr) ;))