问题描述
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))
正如您在上面看到的那样,那个箱线图是巨大的!如何更改宽度?如您在上面所看到的,我尝试通过命令width
来执行此操作,但是它没有用(这对我来说很奇怪,因为我阅读了一些有关此的文章,并且width
命令正在运行。
我想做的第二件事是标记与箱线图相关的值(如中位数,第一分位数,第三分位数,最大值,最小值),但我想始终标出顶部(max()
例如,如果存在则将标记异常值)。
如上所见,离群值由max()
功能标记,但未标记上杆的顶部。有什么办法可以做到吗?我试图通过添加到breaks=()
命令来做到这一点:
ifelse(max(x)>(3/2*summary(x)[['3rd Qu.']]),max(x[x<3/2*summary(x)[['3rd Qu.']]]),"")
但是它不起作用。我的直觉是:如果存在异常(条件),则在棒的顶部标记最接近3/2 *第三分位数的值。有什么办法可以解决这两个问题?
解决方法
您可以尝试:
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] & 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()
)