Большая часть недогруженной визуализации данных [закрывается]

Гистограммы и scatterplots являются замечательными методами визуализации данных и отношений между переменными, но недавно я задавался вопросом, о каких методах визуализации я отсутствую. То, что Вы думаете, является самым недогруженным типом графика?

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

  1. Не быть очень наиболее часто используемым на практике.
  2. Будьте понятны без большого фонового обсуждения.
  3. Будьте применимы во многих общих ситуациях.
  4. Включайте восстанавливаемый код для создания примера (предпочтительно в R). Связанное изображение было бы хорошо.
176
задан Ian Fellows 16 January 2010 в 06:03
поделиться

9 ответов

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

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

Карты тепла

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

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: Interactive 3D-графика

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

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

Ggobi

Другой пакет, который стоит знать, составляет RGGOBI . Есть Книга спрингер по предмету , а также много замечательной документации / примеров в Интернете, в том числе в , «Глядя на данные» .

88
ответ дан 23 November 2019 в 20:22
поделиться

Вам нужно обновить stdout из одного потока, а не из нескольких потоков... или у вас нет контроля над перемежающимся вводом-выводом.

необходимо создать один поток для записи выходных данных.

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

-121--2913811-

Самый эффективный способ сделать это - если предикат, который вы фильтруете, недорог и вы получаете доступ к нему с помощью одного потока - обычно это пройти список дважды:

public Car[] getFourDoors(Car[] all_cars) {
  int n = 0;
  for (Car c : all_cars) if (c.doorCount()==4) n++;
  Car[] cars_4d = new Car[n];
  n = 0;
  for (Car c : all_cars) if (c.doorCount()==4) cars_4d[n++] = c;
  return cars_4d;
}

Это пересекает список дважды и вызывает тест дважды, но не имеет дополнительных выделений или копирования. Методы в стиле Vector пересекают список один раз, но выделяют примерно в два раза необходимую память (временно) и копируют каждый хороший элемент примерно в два раза. Так что если вы фильтруете крошечную часть списка (или производительность не проблема, что очень часто это не так), то метод Vector хорош. В противном случае версия выше работает лучше.

-121--2325129-

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

11
ответ дан 23 November 2019 в 20:22
поделиться

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

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

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

10
ответ дан 23 November 2019 в 20:22
поделиться

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

15
ответ дан 23 November 2019 в 20:22
поделиться

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

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

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

Polar chart showing site traffic, with peaks at hours 1 and 22

Существует два способа (что я знаю) для создания таких участков, используя 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)
56
ответ дан 23 November 2019 в 20:22
поделиться

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

Параллельные координаты участков (PDF), для многомерного анализа.

Ассоциация и Мозаика Сюжеты, для визуализации таблиц непредвиденных обстоятельств (см. Пакет VCD )

18
ответ дан 23 November 2019 в 20:22
поделиться

Другим приятным визуализацией серии временных рядов, которые я просто рассматривал, это «Bump Chart» (как показано в , этот пост в блоге «обучения R» ). Это очень полезно для визуализации изменений в положении со временем.

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

alt text

25
ответ дан 23 November 2019 в 20:22
поделиться

, касающихся идеи для бесконтайных и других гуфТе, Yaletoolkit Пакет на Cran обеспечивает функции Sparkline и Sparklines .

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

30
ответ дан 23 November 2019 в 20:22
поделиться

Boxplots! Пример из справки R:

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

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

14
ответ дан 23 November 2019 в 20:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: