gpt4 book ai didi

r - 如何在没有数据的类别上强制执行ggplot的position_dodge?

转载 作者:行者123 更新时间:2023-12-03 13:00:59 25 4
gpt4 key购买 nike

我试图在ggplot上使用position_dodge来获得两个共享相同类别(cat)的不同信号(ind)的箱线图。如果存在一个类别的数据用于一个信号,而另一类别的数据则没有,则带有数据的信号的箱线图将覆盖所有水平间距,并且不遵循该特定类别的position_dodge指令。有没有办法使ggplot强制执行规避规则?在下面的示例中可以看到,信号x没有类别B的数据,因此它丢失了position_dodge保留的空间。我想避免这种情况。

提前致谢。

data<-data.frame(cat=c('A','A','A','A','B','B','A','A','A','A','B','B'), 
values=c(3,2,1,4,NA,NA,4,5,6,7,8,9),
ind=c('x','x','x','x','x','x','y','y','y','y','y','y'))

print(ggplot() +
scale_colour_hue(guide='none') +
geom_boxplot(
aes(x=as.factor(cat), y=values,
fill=ind),
position=position_dodge(width=.60),
data=data,
outlier.size = 1.2,
na.rm=T))

进度更新

经过一些解决方法后,我想出了我想要的结果...(有点)
data            <- data.frame(
cat=c('A','A','A','A','B','B','A','A','A','A','B','B','B'),
values=c(3,2,1,4,NA,NA,4,5,6,7,8,9, 0),
ind=c('x','x','x','x','x','x','y','y','y','y','y','y','x'))

p <- ggplot() +
scale_colour_hue(guide='none') +
geom_boxplot(aes(x=as.factor(cat), y=values, fill=ind),
position=position_dodge(width=.60),
data=data,
outlier.size = 1.2,
na.rm=T) +
geom_line(aes(x=x, y=y),
data=data.frame(x=c(0,3),y=rep(0,2)),
size = 1,
col='white')
print(p)

有些人建议使用刻面来达到我想要的效果。刻面并不能给我想要的效果。我正在寻找的最终图形如下所示:

如果您注意到,y = 10处的白色大刻度线比其他刻度线要厚。较粗的线是geom_line,其大小为1,可隐藏不需要的箱形图。

我希望我们可以更无缝地组合不同的几何对象。我在Hadley的github上将其报告为bug,但是Hadley表示,这是position_dodge的设计行为。我想我以一种非标准的方式使用ggplot2,解决方法是解决此类问题的方法。无论如何,我希望这可以帮助R的一些人进一步 push ggplot的强大功能。

最佳答案

B的x没有值,因此您可以添加“B”,0,“x”,这基本上表示B的x没有“值”的分布。中位数和其他百分位数均为零。

 data<-data.frame(cat=c('A','A','A','A','B','B','A','A','A','A','B','B','B'), 
values=c(3,2,1,4,NA,NA,4,5,6,7,8,9,0),
ind=c('x','x','x','x','x','x','y','y','y','y','y','y','x'))

另外,您不必在此处添加位置参数,因为当您将x作为一个因素时,ggplot-geom_boxplot会自动避开侧面。
print(ggplot() +
scale_colour_hue(guide='none') +
geom_boxplot(aes(x=as.factor(cat), y=values, fill=ind),
data=data,
outlier.size = 1.2,
na.rm=T))

关于r - 如何在没有数据的类别上强制执行ggplot的position_dodge?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12806260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com