一些箱线图改进
Some boxplot improvements
我有一个问题无法解决。假设我有以下代码:
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()
例如将标记离群值(如果存在)。
正如你在上面看到的,outlier 被 max()
函数标记,但是 upper stick 的顶部没有被标记。有什么办法吗?我试图通过添加到 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()
)
我有一个问题无法解决。假设我有以下代码:
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()
例如将标记离群值(如果存在)。
正如你在上面看到的,outlier 被 max()
函数标记,但是 upper stick 的顶部没有被标记。有什么办法吗?我试图通过添加到 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()
)