Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何在ggplot2中修改箱线图的胡须?_R_Ggplot2_Boxplot - Fatal编程技术网

R 如何在ggplot2中修改箱线图的胡须?

R 如何在ggplot2中修改箱线图的胡须?,r,ggplot2,boxplot,R,Ggplot2,Boxplot,我将从MWE开始: library(ggplot2) p <- ggplot(mtcars, aes(factor(cyl), mpg, fill = factor(am))) p + geom_boxplot() 线范围相互叠加。因此,下一次尝试: p + stat_boxplot(geom = 'linerange', colour = "red", position = position_dodge(width = .5)) + stat_sum_df("median_h

我将从MWE开始:

library(ggplot2)

p <- ggplot(mtcars, aes(factor(cyl), mpg, fill = factor(am)))
p + geom_boxplot()

线范围相互叠加。因此,下一次尝试:

p + stat_boxplot(geom = 'linerange', colour = "red", position = position_dodge(width = .5)) +
   stat_sum_df("median_hilow",conf.int=0.5, position = position_dodge(width = .5))

看起来更好,但现在在框之间有一个固定的空间(比较第一个和第三个图上的cyl=8)。由于我将对不同级别的
am
使用此代码(当然,在我的实际数据中,它不是
am
),我事先不知道框本身的宽度,因此我无法为
行范围
设置固定的
宽度,而不为框指定固定的
宽度


有没有一种方法可以选择性地修改
箱线图的胡须
,或者根据箱线之间的间距调整
linerange
元素之间的间距?

如何将两个箱线图相互重叠。一个有红线,另一个在上面,没有任何线人

p + geom_boxplot(color="red") + geom_boxplot(aes(ymin=..lower.., ymax=..upper..)) 

另一个选项是绘制错误条,并在错误条的顶部绘制无胡须的方框图:

library(ggplot)
p + stat_boxplot(
  geom = "errorbar",
  colour = "red",
  width = 0,
  position = position_dodge(0.75)
) +
  geom_boxplot(coef = 0, outlier.shape = NA)

这并不简单,但一种方法是在彼此的顶部创建两个箱线图。在其中一个框中,您删除了胡须和异常值(这样只有框可见),并在第二个框图(包括胡须)上绘制,将颜色更改为红色。谢谢,这非常有效!只是一个问题:
.lower..
.upper..
中的点是什么意思?原始data.frame实际上没有列
lower
。此变量在
stat\u boxplot
调用中创建。可以使用在ggplot stats中创建的变量,只需在名称前后添加两个点。类似且常用的是
geom_bin(aes(y=…density…)
。太聪明了!救我一命!
library(ggplot)
p + stat_boxplot(
  geom = "errorbar",
  colour = "red",
  width = 0,
  position = position_dodge(0.75)
) +
  geom_boxplot(coef = 0, outlier.shape = NA)