好的,经过一些个人试验/错误,我得到了两个答案:
首先,在查看代码之后,不应该那样使用 wd,并且不支持具有多个值(与'col ='不同)。似乎 'wd=' 并不意味着在正常使用中直接用于指定 beanplot 宽度。实际上,当没有提供“wd”(或 wd=NA)时,wd 是根据“maxwidth=”计算的,但会归一化为所有密度函数的最大值。因此,如果想要控制 bean 的宽度,指定 'maxwidth=' 似乎更合适。
其次,我写了一些代码来真正实现我想要的。它可能很乱,请随意增强它。此示例可用于函数 beanplot 本机不支持的任何参数变化。
您会注意到,代码显示了为什么 'wd=' 仍然很重要的示例,因为我们希望对所有密度图的 bean 的所有宽度值进行一次标准化。
col_list = list('orange','yellow')
wd_fac = aggregate(x~f1,Test,length)$x # get the size relative to the number of points in each bean
wd_fac <- wd_fac/max(wd_fac)
par(mfrow=c(1,2))
## Normal plot
beanplot(x~f1,Test, col=col_list)
## Our plot
bp <- beanplot(x~f1,Test,what=c(T,F,F,F)) # plots the line and frames + get the general parmeters
sapply(1:length(levels(Test$f1)),
function(X){
beanplot(subset(Test, f1 == levels(f1)[X])$x,
col=col_list[X],
bw = bp$bw, # we may want to keep the bandwidth
wd= bp$wd*wd_fac[X],
at=X,
what=!c(T,F,F,F),
add = T)}
)