Boxplot для нескольких раздач?

9

Мне нужно нарисовать 20 распределений в одном графике в R, и это не выглядит хорошо (загромождено) для меня с обычным блокпостом (20 блоков) даже с boxwex = 0,3. Не могли бы вы подсказать мне, как я могу построить вид коробчатого графика в R для 20 распределений, с точками для медианы и просто линией вместо прямоугольника, как показано ниже. Пожалуйста, также предложите мне, если есть какой-либо метод R, который производит хорошие коробочные графики, особенно если вы хотите показать несколько распределений в одном графике.

 -----0----
samarasa
источник

Ответы:

12

(Это действительно комментарий, но поскольку он требует иллюстрации, он должен быть опубликован как ответ.)

Эд Туфте переработал коробочную диаграмму в своем « Визуальном отображении количественной информации» (стр. 125, первое издание 1983 г.) именно для того, чтобы обеспечить «неформальный исследовательский анализ данных, когда время исследователя должно быть посвящено другим вопросам, помимо рисования линий». Я (совершенно естественным образом) расширил его редизайн, чтобы в нем можно было отображать выбросы в этом примере, показывая 70 параллельных коробочных графиков:

Tufte boxplots

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

Сравните это с обычной передачей тех же данных:

Обычные боксы

Tufte представляет несколько других редизайнов, основанных на его принципе «максимизировать соотношение чернил данных». Их ценность заключается в том, чтобы показать, как этот принцип может помочь нам разработать эффективную исследовательскую графику. Как видите, механизм их построения сводится к поиску любой графической платформы, на которой вы можете рисовать точечные маркеры и линии.

Whuber
источник
Не могли бы вы помочь нарисовать верхний график в R?
Самараса
1
@kkp Вот черновик . Хороший ответ (+1).
chl
А вот дополнительные возможности в R - найдены на SO: функции, доступные для боксов Tufte в R? ,
ЧЛ
@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Функция имеет множество опций , так что вы можете настроить его желание вашего сердца. Есть также способ сделать beanplots в ggplot2 (нужна последняя версия):

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

naught101
источник
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) )

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

Грег Сноу
источник