graphics Большая часть недоиспользованной визуализации данных




visualization plot (12)

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

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

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

Посмотрите работу Эдварда Туфта и особенно эту книгу

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

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


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

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


Помимо превосходной работы Tufte, я рекомендую книги Уильяма С. Кливленда: визуализация данных и элементов графических данных . Они не только превосходны, но и все они выполняются в R, и я считаю, что этот код является общедоступным.


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

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.


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

Во-первых, я хотел бы указать вам на очень хороший учебник по 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)

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

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

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

В R-Wiki есть хороший пример того, как рисовать 3D-графики с использованием rgl.

GGobi

Другой пакет, который стоит знать, это rggobi . Существует книга Springer по этому вопросу и множество замечательных документов / примеров в Интернете, в том числе на курсе «Глядя на данные» .


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

Вот пример из Quick-R:

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

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


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

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

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

Есть два пути (что я знаю), чтобы создавать графики, подобные этому, используя R (я создал график выше w / R). Один из них заключается в том, чтобы закодировать свою собственную функцию в базовых или сетчатых графических системах. Другим способом, который проще, является использование круговой упаковки . Функция, которую вы используете, - « 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)


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

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
  )

В этом вопросе обсуждаются и другие способы сделать их (включая другой вид ящика).



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

  require(fmsb)
  gstem(beaver1$temp)


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

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