Самая недооцененная визуализация данных

Гистограммы и диаграммы рассеяния — отличные методы визуализации данных и взаимосвязей между переменными, но в последнее время мне стало интересно, каких методов визуализации мне не хватает. Как вы думаете, какой тип сюжета является наиболее недоиспользуемым?

Ответы должны:

  1. Не очень часто используется на практике.
  2. Будьте понятны без долгих фоновых обсуждений.
  3. Быть применимым во многих распространенных ситуациях.
  4. Включите воспроизводимый код для создания примера (желательно на R). Связанное изображение было бы неплохо.

person Community    schedule 16.01.2010    source источник
comment
Я думаю, что это очень полезная дискуссия, и мне жаль, что она закрыта.   -  person Alex Brown    schedule 20.03.2012
comment
@AlexBrown: тогда почему бы не проголосовать за открытие? Я понимаю, почему формулировка этого вопроса может показаться неконструктивной, но этот вопрос привел к одним из самых вдумчивых и проницательных ответов по этой теме в Интернете. Я хотел бы видеть эти ответы обновленными и расширенными.   -  person max    schedule 09.04.2012
comment
Вероятно, это следует переместить на stats.stackoverflow.com. Это гораздо больше подходит для этого сайта.   -  person naught101    schedule 11.05.2012
comment
Жаль, что никто не упомянул здесь QQ-plot до того, как это было закрыто. Они чертовски полезны!   -  person naught101    schedule 19.07.2012
comment
Это должно быть вновь открыто.   -  person Peter Flom    schedule 03.09.2015
comment
Я создал список инструментов и библиотек визуализации. Я думаю, что эта статья даст вам самые востребованные инструменты визуализации, которые вы когда-либо искали. shivganesh.com/2015/05/   -  person Shiv Kumar Ganesh    schedule 24.09.2015


Ответы (15)


Я действительно согласен с другими авторами: книги Тафте просто фантастические и их стоит прочитать.

Во-первых, я хотел бы указать вам на очень хороший учебник по ggplot2 и ggobi из «Просмотра данных» ранее в этом году. Кроме того, я бы выделил только одну визуализацию из R и два графических пакета (которые не так широко используются, как базовая графика, решетка или ggplot):

Тепловые карты

Мне очень нравятся визуализации, которые могут обрабатывать многомерные данные, особенно данные временных рядов. Для этого могут быть полезны тепловые карты. Один действительно хороший вариант был представлен Дэвид Смит в блоге Revolutions. Вот код ggplot, любезно предоставленный Хэдли:

stock <- "MSFT"
start.date <- "2006-01-12"
end.date <- Sys.Date()
quote <- paste("http://ichart.finance.yahoo.com/table.csv?s=",
                stock, "&a=", substr(start.date,6,7),
                "&b=", substr(start.date, 9, 10),
                "&c=", substr(start.date, 1,4), 
                "&d=", substr(end.date,6,7),
                "&e=", substr(end.date, 9, 10),
                "&f=", substr(end.date, 1,4),
                "&g=d&ignore=.csv", sep="")    
stock.data <- read.csv(quote, as.is=TRUE)
stock.data <- transform(stock.data,
  week = as.POSIXlt(Date)$yday %/% 7 + 1,
  wday = as.POSIXlt(Date)$wday,
  year = as.POSIXlt(Date)$year + 1900)

library(ggplot2)
ggplot(stock.data, aes(week, wday, fill = Adj.Close)) + 
  geom_tile(colour = "white") + 
  scale_fill_gradientn(colours = c("#D61818","#FFAE63","#FFFFBD","#B5E384")) + 
  facet_wrap(~ year, ncol = 1)

Что в итоге выглядит примерно так:

alt text

RGL: интерактивная 3D-графика

Еще один пакет, на изучение которого стоит потратить усилия, — это RGL, который легко обеспечивает возможность создания интерактивной 3D-графики. Для этого есть много примеров в Интернете (в том числе в документации rgl).

В R-Wiki есть хороший пример как строить 3D-графики рассеяния с помощью rgl.

GGobi

Еще один пакет, о котором стоит знать, это rggobi. Существует книга Springer по этому вопросу, а также множество отличной документации/примеров в Интернете, в том числе на < курс href="http://lookatdata.com/jsm-2009/" rel="noreferrer">"Изучение данных".

person Shane    schedule 16.01.2010
comment
Ницца. Спасибо за добавление кода/изображения. - person Ian Fellows; 16.01.2010
comment
на что указывает вертикальное положение буквы «Z» или изгиб каждой сплошной черной вертикальной линии? - person doug; 23.01.2010
comment
Это границы месяца (месяцы не заканчиваются в один и тот же день). - person Shane; 23.01.2010
comment
Это красиво. Как вы установили границы месяца? - person Alex Brown; 20.03.2012
comment
@AlexBrown Глядя на файл R, кажется, что они сделаны с большим трудом. с grid.lines. - person sebastian-c; 11.10.2012
comment
рабочая ссылка на файл R - person iolsmit; 25.11.2013
comment
Большинство ссылок в вашем посте не работают, т.е. http://ichart.finance.yahoo.com/table.csv?s= Можете ли вы опубликовать что-нибудь, что подскажет, какие данные должны быть вместо этой ссылки? Например, FistColumn = Дата, значения второго столбца. - person Przemyslaw Remin; 29.05.2018

Мне очень нравятся точечные диаграммы, и когда я рекомендую их другим для решения соответствующих проблем с данными, они неизменно удивлен и обрадован. Они, кажется, не получают много пользы, и я не могу понять, почему.

Вот пример из Quick-R: dotplot on car data

Я считаю, что Кливленд несет наибольшую ответственность за их разработку и распространение, и пример в его книге (в которой ошибочные данные легко обнаруживаются с помощью точечной диаграммы) является мощным аргументом в пользу их использования. Обратите внимание, что в приведенном выше примере в каждой строке ставится только одна точка, тогда как их реальная сила заключается в том, что у вас есть несколько точек в каждой строке с легендой, объясняющей, какая из них какая. Например, вы можете использовать разные символы или цвета для трех разных моментов времени и, таким образом, легко получить представление о закономерностях времени в разных категориях.

В следующем примере (выполненном в Excel!), вы можете ясно увидеть, какая категория могла пострадать от замены метки.

Точечная диаграмма с 2 группами

person Community    schedule 28.02.2011
comment
Чем точечный график отличается от графика рассеяния с переключенной осью, одна из которых является категориальной? - person DrSAR; 10.11.2011
comment
@DrSAR Чем гистограмма отличается от гистограммы или график плотности отличается от линейного графика? Вы можете описать многие стандартные типы диаграмм с точки зрения более фундаментальной геометрии (например, Semiologie Graphique) Бертена, но это не делает понимание того, как построить что-то определенным образом, менее уникальным. В этом случае вы наносите две части категориальной информации (одну по вертикали, одну по форме символа графика) на одну часть непрерывных данных. Хотя в большинстве программных пакетов вы бы взломали диаграмму рассеяния, чтобы создать ее, это, безусловно, не диаграмма рассеяния. - person Ari B. Friedman; 10.11.2011
comment
@ gsk3 Не хотел показаться язвительным. На самом деле, теперь я (прочитав больше о грамматике графики и подобных работах) понимаю, что это различие более высокого уровня может быть весьма важным для презентации. Спасибо, что показали это. - person DrSAR; 11.11.2011
comment
@DrSAR И я не хотел защищаться. Природа комментариев SO, я думаю ;-) - person Ari B. Friedman; 11.05.2012

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

Я думаю, это потому, что иногда ваши данные по своей сути полярны, а не линейны, например, они цикличны (координаты x представляют время в течение 24-часового дня в течение нескольких дней) или данные были ранее сопоставлены с полярное функциональное пространство.

Вот пример. На этом графике показан средний объем трафика веб-сайта по часам. Обратите внимание на два пика в 22:00 и в 1:00. Для сетевых инженеров Сайта это важно; также важно, что они происходят рядом друг с другом (с интервалом всего два часа). Но если вы нанесете те же данные на традиционную систему координат, эта закономерность будет полностью скрыта — при линейном построении эти два всплеска будут разделены 20 часами, хотя между ними всего два часа. часов друг от друга в последовательные дни. Приведенная выше полярная диаграмма показывает это скупым и интуитивно понятным способом (легенда не нужна).

Полярная диаграмма, показывающая посещаемость сайта, с пиками в 1 и 22 часа

Есть два способа (о которых я знаю) создать такие графики с помощью R (я создал график выше с помощью R). Один из них заключается в том, чтобы закодировать свою собственную функцию либо в базовой, либо в сеточной графической системе. Другой, более простой способ — использовать circular package. Вы бы использовали функцию 'rose.diag':

data = c(35, 78, 34, 25, 21, 17, 22, 19, 25, 18, 25, 21, 16, 20, 26, 
                 19, 24, 18, 23, 25, 24, 25, 71, 27)
three_palettes = c(brewer.pal(12, "Set3"), brewer.pal(8, "Accent"), 
                   brewer.pal(9, "Set1"))
rose.diag(data, bins=24, main="Daily Site Traffic by Hour", col=three_palettes)
person Community    schedule 18.01.2010
comment
Копируя ваш код, я получаю совсем другой сюжет (довольно некрасивый); есть идеи, почему? Я получаю это предупреждение: 1: В as.circular(xx[, 1]) : объект приводится к классу «круговой», используя значение по умолчанию для следующих компонентов: тип: «углы» единицы: «радианы» шаблон: ' none» по модулю: «asis» ноль: 0 ротация: «counter» rose.diagdata24Daily Site Traffic by Hourthree_palettes - person datayoda; 20.04.2011
comment
У меня точно такая же проблема. - person crayola; 29.06.2011
comment
Вы также можете сделать это с помощью линейного сюжета. Может быть немного сложнее читать, но это также может быть действительно здорово для более детализированных данных или данных, которые подвергаются более чем одному циклу (например, построить десять циклов, а затем построить их среднее значение). - person naught101; 19.07.2012
comment
У меня тоже были проблемы с повторением сюжета. В конце концов я решил, что проще использовать ggplot2. Я оставил короткую демонстрацию на Rpubs с кодом и результатами: rpubs.com/mattbagg/circular - person MattBagg; 24.04.2013
comment
@doug -- Блестяще написанное объяснение! Спасибо! - person d_a_c321; 03.11.2013
comment
Эквивалент ggplot2: qplot(y=data, x=1:length(data), fill=factor(1:length(data)), stat='identity', geom='bar') + coord_polar() - person naught101; 11.09.2014
comment
Я написал несколько оболочек ggplot2, предназначенных для представления измерения в виде площади клина, а не радиуса. См. ReadMe на github.com/swihart/aaroseplot. - person swihart; 29.09.2014

Если на вашем точечном графике так много точек, что он превращается в полный беспорядок, попробуйте сглаженный точечный график. Вот пример:

library(mlbench) ## this package has a smiley function
n <- 1e5 ## number of points
p <- mlbench.smiley(n,sd1 = 0.4, sd2 = 0.4) ## make a smiley :-)
x <- p$x[,1]; y <- p$x[,2]
par(mfrow = c(1,2)) ## plot side by side
plot(x,y) ## left plot, regular scatter plot
smoothScatter(x,y) ## right plot, smoothed scatter plot

Пакет hexbin (предложенный @Dirk Eddelbuettel) используется для той же цели, но smoothScatter() имеет то преимущество, что он принадлежит пакету graphics и, таким образом, является частью стандартной установки R.

Смайлик в виде обычной или сглаженной диаграммы рассеяния

person Community    schedule 15.08.2011
comment
Для полноты вы также можете получить этот эффект в ggplot, используя прозрачность (альфа) в сочетании с точкой геометрии. - person Paul Hiemstra; 21.12.2011
comment
это то же самое, что и оценка плотности ядра, или просто похоже? - person endolith; 28.05.2012

Что касается спарклайна и другой идеи Tufte, пакет YaleToolkit на CRAN предоставляет функции sparkline и sparklines.

Другой пакет, полезный для больших наборов данных, — hexbin, так как он умело «разделяет» данные на сегменты, чтобы иметь дело с наборами данных, которые могут быть слишком большими для наивных диаграмм рассеяния.

person Dirk Eddelbuettel    schedule 16.01.2010
comment
+1 к спарклайнам. В настоящее время я работаю над пакетом, ориентированным на создание спарклайнов в R — они отлично дополняют таблицы в отчетах Sweave. - person Sharpie; 23.01.2010
comment
Прохладный! Я не слишком доволен тем, что у Джея есть в YaleToolkit, и мне бы очень хотелось иметь спарклайны в таблицах! - person Dirk Eddelbuettel; 23.01.2010
comment
Я только что задокументировал способ создания спарклайнов только с использованием plot в обновлении моего вопроса, с некоторой помощью этого сообщение на форуме Tufte - person Ben; 02.12.2011
comment
Версия Hmisc::latex() выходных данных Hmisc::describe включает мини-гистограмму, которая включается в таблицу. - person IRTFM; 08.11.2013

Скрипичные сюжеты (которые сочетают в себе коробчатые сюжеты с плотностью ядра) относительно экзотичны и довольно круты. Пакет vioplot в R позволяет создавать их довольно легко.

Вот пример (ссылка на википедию также показывает пример):

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

person Community    schedule 03.11.2011
comment
Сюжеты для скрипки также доступны через пакет решетки: bwplot(... panel = panel.violin) - person David J.; 06.12.2011
comment
Скоро появится версия скрипичных сюжетов ggplot2. github.com/wch/ggplot2/wiki/geom_violin - person Roman Luštrik; 21.02.2012
comment
Я не считаю, что тонкие скрипичные сюжеты настолько полезны, вместо этого мне нравится показывать все точки с дрожанием. - person Nakx; 27.02.2019

Еще одна хорошая визуализация временных рядов, которую я только что рассматривал, — это "диаграмма рельефа" (как показано в эту запись в блоге Learning R). Это очень полезно для визуализации изменений положения с течением времени.

Вы можете прочитать о том, как его создать, на http://learnr.wordpress.com/, но это как это выглядит в итоге:

альтернативный текст

person Community    schedule 20.01.2010
comment
Мне нравится диаграмма рельефа для этих конкретных данных, но мне трудно придумать более общие ситуации, в которых она была бы полезна. Тем не менее, я думаю, мы все можем согласиться с тем, что блог Learning R потрясает. - person Ian Fellows; 21.01.2010
comment
Рельефная диаграмма представляет собой параллельный координатный график ранжированных данных. - person hadley; 25.01.2010
comment
это напоминает мне слоуграф, который хорош для представления изменения рейтинга с течением времени или отношений между рейтингами: charliepark.org/slopegraphs - person topchef; 24.04.2013

Мне также нравятся модификации коробчатых диаграмм Тафте, которые позволяют гораздо проще сравнивать небольшие кратные, потому что они очень «тонкие» по горизонтали и не загромождают график лишними чернилами. Однако лучше всего он работает с довольно большим количеством категорий; если у вас есть только несколько на графике, обычные (Тьюки) бокс-плоты выглядят лучше, поскольку они имеют немного больший вес.

library(lattice)
library(taRifx)
compareplot(~weight | Diet * Time * Chick, 
  data.frame=cw , 
  main = "Chick Weights",
  box.show.mean=FALSE,
  box.show.whiskers=FALSE,
  box.show.box=FALSE
  )

сравнительный график

Другие способы их создания (включая другой тип коробчатого графика Tufte) обсуждаются в этом вопрос.

person Community    schedule 07.08.2011
comment
@daroczig Спасибо. На днях перепишу его, чтобы взять разные конфигурации группировок. Я многому научился с тех пор, как написал эту функцию! - person Ari B. Friedman; 10.09.2011
comment
Ваши сюжеты мне нравятся гораздо больше, чем сюжеты Тафти, которые смехотворно трудно читать. Я по-прежнему считаю, что боксплоты в стиле Тьюки лучше, хотя хорошим компромиссом может быть что-то вроде того, что у вас здесь, но с линиями шириной 3 пикселя вместо смещения в 1 пиксель. И я думаю, что горизонтальная линия шириной 1 пиксель для медианы, вероятно, будет более аккуратной и точной. - person naught101; 11.05.2012

Мы не должны забывать о милом и (исторически) важном сюжете со стеблями и листьями (который Тафти тоже любит!). Вы получаете прямой численный обзор плотности и формы ваших данных (конечно, если ваш набор данных не превышает 200 точек). В R функция stem создает отображение стебля и листа (в рабочей области). Я предпочитаю использовать функцию gstem из пакета fmsb, чтобы рисовать его напрямую в графическом устройстве. Ниже представлена ​​дисперсия температуры тела бобра (данные должны быть в вашем наборе данных по умолчанию) в отображении «стебель за листом»:

  require(fmsb)
  gstem(beaver1$temp)

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

person Community    schedule 20.12.2011

Графики горизонта (pdf) для одновременной визуализации множества временных рядов.

Графики с параллельными координатами (pdf) для многомерного анализа.

Ассоциация и мозаичные графики для визуализации таблиц непредвиденных обстоятельств (см. vcd пакет)

person Community    schedule 18.01.2010

В дополнение к прекрасной работе Тафти я рекомендую книги Уильяма С. Кливленда: Visualizing Data и Elements of Graphing Data. Они не только превосходны, но и все они были сделаны на R, и я считаю, что код общедоступен.

person Peter Flom    schedule 17.01.2010

Боксплоты! Пример из справки R:

boxplot(count ~ spray, data = InsectSprays, col = "lightgray")

На мой взгляд, это самый удобный способ быстро просмотреть данные или сравнить распределения. Для более сложных дистрибутивов есть расширение vioplot.

person Community    schedule 21.06.2010
comment
Здесь также можно упомянуть Beanplot jstatsoft.org/v28/c01/paper и cran.r-project.org/web/packages/beanplot/index.html - person radek; 08.11.2010
comment
Boxplots не так уж мало используются, не так ли? Я имею в виду, что во многих статьях гистограммы используются для данных, которые должны быть представлены в виде коробчатой ​​диаграммы, но они все еще довольно распространены. - person naught101; 11.05.2012

Мне кажется, что мозаичные сюжеты соответствуют всем четырем упомянутым критериям. Есть примеры в r, под мозаикой.

person Peter Flom    schedule 17.01.2010
comment
Лучшая реализация мозаичных графиков находится в библиотеке vcd (имя функции "mosaic"). Он имеет гораздо более гибкую сигнатуру метода и реализован в сетке (а не в «базовой» графической системе). - person doug; 18.01.2010

Ознакомьтесь с работой Эдварда Тафте и особенно с этой книгой.

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

Кстати, мне нравится его техника визуализации данных спарклайна. Сюрприз! Google уже написал его и разместил в Google Code.

person Paul Sasik    schedule 16.01.2010

Сводные сюжеты? Как упомянуто на этой странице:

Визуализация сводной статистики и неопределенности

person Community    schedule 28.12.2010
comment
эта ссылка не работает - person tjebo; 05.02.2020