Гистограммы и scatterplots являются замечательными методами визуализации данных и отношений между переменными, но недавно я задавался вопросом, о каких методах визуализации я отсутствую. То, что Вы думаете, является самым недогруженным типом графика?
Ответы должны:
Я действительно согласен с другими плакатами: Книги Туфте фантастические и стоит читать.
Во-первых, я бы указывал на вас очень хороший учебник по 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)
, который заканчивается несколько подобным:
RGL: Interactive 3D-графика
Другой пакет, который стоит, чтобы выучить, это RGL , который легко предоставляет возможность создавать интерактивную трехмерную графику. Для этого есть много примеров в Интернете (в том числе в документации RGL).
R-Wiki имеет хороший пример того, как построить графики 3D разброса с использованием RGL.
Ggobi
Другой пакет, который стоит знать, составляет RGGOBI . Есть Книга спрингер по предмету , а также много замечательной документации / примеров в Интернете, в том числе в , «Глядя на данные» .
Вам нужно обновить 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, под мозаикплотами.
Посмотрите на работу Эдварда Тафта и особенно на эту книгу
Вы также можете попробовать поймать его передвижную презентацию . Она довольно хороша и включает в себя пучок из четырех его книг. (Клянусь, у меня нет акций его издательства!)
Кстати, мне нравится его техника визуализации искровых данных. Сюрприз! Google уже написал его и выложил на Google Code
В дополнение к превосходной работе Тафта, я рекомендую книги Уильяма С. Кливленда: Визуализирующие данные и Элементы графических данных . Они не только превосходны, но и все сделаны на R, и я считаю, что код общедоступен.
Участки с использованием полярных координат, безусловно, недостаточно используются - некоторые бы сказали бы с веской причиной. Я думаю, что ситуации, которые оправдывают их использование, не являются общими; Я также думаю, что когда возникают эти ситуации, полярные участки могут выявить узоры в данных, которые не могут быть линейными участками.
Я думаю, что это потому, что иногда ваши данные полярно полярно Polar, а не линейный - например, он является циклическими (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)
Графики горизонта (PDF), для визуализации многих временных рядов одновременно.
Параллельные координаты участков (PDF), для многомерного анализа.
Ассоциация и Мозаика Сюжеты, для визуализации таблиц непредвиденных обстоятельств (см. Пакет VCD )
Другим приятным визуализацией серии временных рядов, которые я просто рассматривал, это «Bump Chart» (как показано в , этот пост в блоге «обучения R» ). Это очень полезно для визуализации изменений в положении со временем.
Вы можете прочитать о том, как создать его на http://lelarnr.wordpress.com/ , но это то, что он в конечном итоге выглядит как:
, касающихся идеи для бесконтайных и других гуфТе, Yaletoolkit Пакет на Cran обеспечивает функции Sparkline
и Sparklines
.
Другим пакетом, который полезен для больших наборов данных, является HEXBIN , так как он умно «разбивает данные в ведра, чтобы иметь дело с наборами набора данных, которые могут быть слишком большими для наивных рассеяний.
Boxplots! Пример из справки R:
boxplot(count ~ spray, data = InsectSprays, col = "lightgray")
На мой взгляд, это наиболее удобный способ быстро просмотреть данные или сравнить распределения.
Для более сложных дистрибутивов существует расширение под названием vioplot
.