Как построить гистограмму с использованием сетки в R?

Я хочу построить график, похожий на график beanplot или violin, но вместо симметричных фигур я хочу построить два разных распределения по разные стороны от центральной линии. Что-то вроде рисунка 4 в этой статье [pdf]http://www.jstatsoft.org/v28/c01/paper.

Я хочу использовать графический движок grid в R. Любые указатели будут полезны. Я просмотрел пакет lattice и функцию histogram в пакете lattice, но это не то, что я хочу делать.

Любая помощь/указатели приветствуются.


person Sam    schedule 13.12.2012    source источник
comment
@BenBarnes на шестой странице (на шестой странице только один сюжет). Это действительно альтернатива коробочному сюжету.   -  person MattLBeck    schedule 13.12.2012
comment
@Mattrition, оооо. Это интересный сюжет. Ах, рисунок 4, а не страница 4.   -  person BenBarnes    schedule 13.12.2012
comment
Я не совсем уверен, что нужно ОП. Из документа ясно, что графику можно создать с помощью beanplot, и даже приводится код для этого.   -  person MattLBeck    schedule 13.12.2012
comment
@BenBarnes, вероятно, моя концепция неверна, может быть, это альтернатива boxplot, но я думаю, что это очень интересный сюжет, и я считаю, что моя работа может извлечь из этого пользу.   -  person Sam    schedule 13.12.2012
comment
@ Сэм Чего тебе не хватает? Код для его создания находится на странице 6. Просто введите свои данные.   -  person MattLBeck    schedule 13.12.2012
comment
И взгляните на набор данных singer, в частности на столбец voice.part.   -  person BenBarnes    schedule 13.12.2012


Ответы (1)


Вы можете достаточно легко получить график полускрипки с помощью довольно простых модификаций функции panel.violin в пакете решетки Саркара. В этой функции есть четыре строки, которые можно изменить внутри вызова grid.polygon, чтобы перейти от «двухстороннего» графика плотности к одностороннему графику плотности. Первые require(lattice) и require(grid). Затем введите panel.violin. Покажу вам "горизонтальную" переделку:

require(grid)
panel.violin2  <-  
    # snipped all the arguments and processing

       grid.polygon(x = c(dx.list[[i]] ), 
   # Notice I removed: ... ,rev(dx.list[[i]]) 
               y = c(2*dy.list[[i]]    ), default.units = "native", 
   # Removed: ...  , -rev(dy.list[[i]])
               name = trellis.grobname(identifier, type = "panel", 
                 group = group), gp = gpar(fill = col, col = border, 
                 lty = lty, lwd = lwd, alpha = alpha))

Также удалите его из соответствующего раздела в предложении else{...}. Теперь вы можете запустить его с помощью примера в справке (panel.violin)

bwplot(voice.part ~ height, singer,
       panel = function(..., box.ratio) {
           panel.violin2(..., col = "transparent",
                        varwidth = FALSE, box.ratio = box.ratio)
           panel.bwplot(..., fill = NULL, box.ratio = .1)
       } )

введите здесь описание изображения

Если вам нужна плотность на другой стороне, все, что вам нужно сделать, это удалить dx.list[[i]] и dy.list[[i]] и оставить rev(dx.list[[i]]) и -rev(dy.list[[i]]).

person IRTFM    schedule 13.12.2012