2013-06-28 5 views
2

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

То, что я хочу

  • дисплей beanplots ширина которых зависит от размера образца.
  • (и теперь) понять, что такое использование 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

ответ

3

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

Прежде всего, посмотрев код, wd не должен использоваться таким образом и не поддерживает несколько значений (в отличие от 'col ='). Похоже, что wd = 'не предназначен для непосредственного использования для указания ширины beanplot при нормальном использовании. В самом деле, когда не предусмотрено 'wd' (или wd = NA), 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

+0

Вы можете попробовать написать функцию, чтобы сделать это. –

 Смежные вопросы

  • Нет связанных вопросов^_^