Pau*_*aul 6 r ggplot2 boxplot geom-text
我使用ggplot2创建了一个并排的boxplot.
p <- ggplot(mtcars, aes(x=factor(cyl), y=mpg))
p + geom_boxplot(aes(fill=factor(cyl)))
Run Code Online (Sandbox Code Playgroud)
我想在图中用min,max,1st quartile,median和3rd quartile进行注释.我知道geom_text()可以这样做并且可能fivenum()有用.但我无法弄清楚我到底能怎么做!这些值应该显示在我的图中.
eip*_*i10 13
我能想到的最简洁的方法就是使用stat_summary.我也映射的标签颜色美观,但你可以,当然,标签,如果你想设置为单一颜色:
ggplot(mtcars, aes(x=factor(cyl), y=mpg, fill=factor(cyl))) +
geom_boxplot(width=0.6) +
stat_summary(geom="text", fun.y=quantile,
aes(label=sprintf("%1.1f", ..y..), color=factor(cyl)),
position=position_nudge(x=0.33), size=3.5) +
theme_bw()
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我们使用quantile摘要函数来获取标签值...y..指回的输出quantile功能(一般..*..是一个ggplot构造用于使用ggplot内计算出的值).
一种方法是简单地制作您需要的 data.frame ,并将其传递给geom_textor geom_label:
library(dplyr)
cyl_fivenum <- mtcars %>%
group_by(cyl) %>%
summarise(five = list(fivenum(mpg))) %>%
tidyr::unnest()
ggplot(mtcars, aes(x=factor(cyl), y=mpg)) +
geom_boxplot(aes(fill=factor(cyl))) +
geom_text(data = cyl_fivenum,
aes(x = factor(cyl), y = five, label = five),
nudge_x = .5)
Run Code Online (Sandbox Code Playgroud)
如果有人处理大范围并且必须对 y 轴进行 log10 变换,我发现一些代码非常有效。只需添加10^..y..和scale_y_log10()。10^如果您之前不添加,..y..则实际分位数值将进行对数转换并按原样显示。
不起作用
ggplot(mtcars, aes(x=factor(cyl), y=mpg, fill=factor(cyl))) +
geom_boxplot(width=0.6) +
stat_summary(geom="text", fun.y=quantile,
aes(label=sprintf("%1.1f", ..y..), color=factor(cyl)),
position=position_nudge(x=0.45), size=3.5) +
scale_y_log10()+
theme_bw()
Run Code Online (Sandbox Code Playgroud)
效果很好
ggplot(mtcars, aes(x=factor(cyl), y=mpg, fill=factor(cyl))) +
geom_boxplot(width=0.6) +
stat_summary(geom="text", fun.y=quantile,
aes(label=sprintf("%1.1f", 10^..y..), color=factor(cyl)),
position=position_nudge(x=0.45), size=3.5) +
scale_y_log10()+
theme_bw()
Run Code Online (Sandbox Code Playgroud)