Использование 'wd=' в beanplot{beanplot} для динамического изменения ширины бобов


Я использую функцию beanplot пакета beanplot, и я не могу найти способ использовать параметр wd= с хорошим результатом.

Чего я хочу

  • отображение диаграмм, ширина которых зависит от размера выборки.
  • (а теперь) поймите, что такое использование 'wd=' и как его использовать.

До сих пор, когда я пытаюсь использовать параметр wd, как список, он дает мне ошибку, как вектор, он дает мне что-то странное (wd, кажется, умножается к значениям оценок плотности)

Пример

library(beanplot)
set.seed(2000)
Test <- data.frame(
  x=rnorm(30), 
  f1 = factor(c(rep('A', 10), rep('B',20))), 
  f2=factor(c('M','F'))
  )

beanplot(x~f1,Test,
         col=list('orange','yellow'),
         wd=c(1:2/2),
         boxwex = 1
)

Beanplot1 http://i41.tinypic.com/wcmg4j.jpg

1 2

1 ответ:

Хорошо, после небольшого личного проб и ошибок я получил два ответа:

Во-первых, после изучения кода, wd не предполагается использовать таким образом, и не поддерживает иметь несколько значений (в отличие от 'col='). Кажется, что компания WD=' это не предназначается, чтобы использоваться непосредственно для указания ширины beanplot в нормальном использовании. Действительно, при отсутствии 'компания WD' (или WD=НС) предусмотрено, компания WD вычисляется из значение maxwidth=', а, нормированная на максимальное значение всей функции плотности. Отсюда кажется больше уместно указать ' maxwidth=', если вы хотите управлять шириной бобов.

Во-вторых, я написал некоторый код, чтобы действительно достичь того, чего я хочу. Это может быть грязно, пожалуйста, освободитесь, чтобы улучшить его. Этот пример можно использовать для любого изменения параметра, которое не поддерживается функцией beanplot изначально.

Вы заметите, что код показывает пример того, почему 'wd=' все еще важно, так как мы хотим, чтобы все значения ширины Боба были нормализованы один раз, для всех плотностные графики.

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)}
)

Beanplot http://i39.tinypic.com/33uxrhf.png