Boxplot для декількох дистрибутивів?


9

Мені потрібно намалювати 20 розподілів в одному графіку на R, і це не виглядає добре (захаращено) для мене звичайним boxplot (20 коробок) навіть з boxwex = 0,3. Чи можете ви запропонувати мені, як я можу побудувати такий вид боксплотів у R для 20-ти розподілів, з крапками для медіани та просто лінією замість поля, як той, що нижче. Будь ласка, підкажіть мені, чи є який-небудь метод R, який видає приємні боксплоти, зокрема, якщо ви хочете показати кілька розподілів в одному графіку.

 -----0----

Відповіді:


12

(Це дійсно коментар, але оскільки він потребує ілюстрації, його потрібно розмістити як відповідь.)

Ед Туфте переробив коробку у своєму Візуальному відображенні кількісної інформації (стор. 125, Перше видання 1983 р.) Саме для того, щоб увімкнути "неофіційний, дослідницький аналіз даних, де час наукового працівника повинен бути присвячений іншим питанням, а не промальовуванню ліній". Я (цілком природним чином) розширив його переробку, щоб розмістити в цьому прикладі малюнки, що показують 70 паралельних короб:

Туфте-коробки

Я можу придумати декілька способів покращити це далі, але це характерно для того, що можна створити в розпалі дослідження складного набору даних: ми задоволені тим, щоб робити візуалізації, які дозволяють нам бачити дані; хороша презентація може прийти пізніше.

Порівняйте це зі звичайним виданням тих самих даних:

Звичайні коробки

Tufte представляє кілька інших оновлень, заснованих на його принципі "максимального співвідношення чорнила даних". Їх цінність полягає в тому, щоб проілюструвати, як цей принцип може допомогти нам розробити ефективну дослідницьку графіку. Як бачите, механіка їх побудови дорівнює знаходженню будь-якої графічної платформи, на якій можна малювати точкові маркери та лінії.


Не могли б ви допомогти в малюванні верхнього графіка в R?
samarasa

1
@kkp Ось приблизний проект . Приємна відповідь (+1).
chl

А ось додаткові можливості в R - знайдені на SO: Функції, доступні для коробних блоків Tufte в R? .
chl

@chl Дякую за посилання. Для запису він включає в себе робочий R код для виготовлення цих перероблених коробних блоків. Цікаво, що це питання було розміщено лише через три дні після цього ...
whuber

1
@naught Цікаві спостереження. Одне потенційне використання таких боксерів - це варіант "мандрівної схематичної схеми" Тукі, в якому (великий) розсіювач розрізається уздовж координати x і значення y узагальнюються за допомогою коробки в кожному відрізку. Така процедура може з легкістю генерувати 70 або більше боксових боків. Програми включають майже будь-які багатовимірні дані: наприклад, x-координата може представляти глибину ґрунту, що відбирається на кожен сантиметр, а y-координата може представляти дані, отримані в декількох місцях.
whuber

10

Beanplots

Можливо, найкрутіші сюжети коли-небудь, це в основному невелика кратна реалізація скрипкових сюжетів. Сюжетні скрипки мають величезну перевагу перед коробками: вони можуть показати набагато більше деталей для дистрибутивів, які не є нормальними (наприклад, вони можуть показувати бімодальні розподіли дуже добре). Оскільки вони зазвичай базуються на згладжуванні Гаусса (або подібному), вони не будуть працювати дуже добре для дистрибутивів з високими кінцевими точками (наприклад, експоненціальні розподіли), але тоді вони не будуть використовуватись.

Beanplots можна легко досягти за R - просто встановіть пакет beanplot :

library(beanplot)

# Sampling code from Greg Snow's answer:
my.dat <- lapply( 1:20, function(x) rnorm(x+10, sample( 10, 1), sample(3,1) ) )

beanplot(my.dat)

Beanplot!

У beanplotфункції є безліч варіантів , тому ви можете налаштувати її на бажання свого серця. Також у ggplot2 є спосіб зробити beanplots (потрібна остання версія):

library(ggplot2)

my.dat <- lapply(1:20, function(x) rnorm(x+10, sample(10, 1), sample(3,1)))
my.df <- melt(my.dat)
ggplot(my.df, aes(x=L1, y=value, group=L1)) + geom_violin(trim=FALSE) +
  geom_segment(aes(x=L1-0.1, xend=L1+0.1, y=value, yend=value), colour='white')

GGplot2 beanplot


3

Ось кілька зразкових кодів R для декількох способів це зробити, ви, мабуть, захочете розширити це (включити мітки тощо) і, можливо, увімкніть його функцією:

my.dat <- lapply( 1:20, function(x) rnorm(x+10, sample( 10, 1), sample(3,1) ) )

tmp <- boxplot(my.dat, plot=FALSE, range=0)

# box and median only
plot( range(tmp$stats), c(1,length(my.dat)), xlab='', ylab='', type='n' )
segments( tmp$stats[2,], seq_along(my.dat), tmp$stats[4,] )
points( tmp$stats[3,], seq_along(my.dat) )

# wiskers and implied box
plot( range(tmp$stats), c(1,length(my.dat)), xlab='', ylab='', type='n' )
segments( tmp$stats[1,], seq_along(my.dat), tmp$stats[2,] )
segments( tmp$stats[4,], seq_along(my.dat), tmp$stats[5,] )
points( tmp$stats[3,], seq_along(my.dat) )

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.