#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) ;))