Більшість невикористаних візуалізації даних [закрито]


178

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

Відповіді повинні:

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

13
Я думаю, що це дуже корисна дискусія, і мені сумно, що вона закрита.
Алекс Браун

2
@AlexBrown: тоді чому б не проголосувати за повторне відкриття? Я можу зрозуміти, чому формулювання цього питання може вважатись "неконструктивною", але це запитання призвело до деяких найбільш продуманих і проникливих відповідей на цю тему в будь-якій точці Інтернету. Я хотів би, щоб ці відповіді були оновлені та розширені.
макс

2
Ймовірно, це слід перемістити на stats.stackoverflow.com. Це набагато більше підходить до цього сайту.
naught101

4
Шкода, що ніхто не згадував сюди QQ-сюжети, перш ніж це було закрито. Вони так чортово корисні!
naught101

Це слід повторно відкрити.
Пітер Флом

Відповіді:


89

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

По-перше, я хотів би вказати вам на дуже хороший підручник з 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 текст

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

Ще один пакет, який варто докласти зусиль для вивчення - це RGL , який легко забезпечує можливість створення інтерактивної 3D графіки. Для цього в Інтернеті є багато прикладів (включаючи документацію на rgl).

У R-Wiki є хороший приклад того, як побудувати графіки 3D-розсіяння за допомогою rgl.

GGobi

Ще один пакунок, який варто знати - це rggobi . На цю тему є книга Спрингера , і багато чудової документації / прикладів в Інтернеті, в тому числі на курсі "Дивлячись на дані" .


приємно. Дякуємо за включення коду / зображення.
Ian Fellows

що позначається вертикальним положенням 'Z' або згином у кожній суцільній чорній вертикальній лінії?
дог

Це місячні межі (місяці не закінчуються в один і той же день).
Шейн

3
Це прекрасно. Як ви отримали межі місяця?
Алекс Браун


58

Мені дуже подобаються dotplots і знаходжу, коли рекомендую їх іншим для відповідних проблем з даними, вони незмінно здивовані та в захваті. Вони, здається, не отримують великої користі, і я не можу зрозуміти, чому.

Ось приклад із Quick-R: точка на даних автомобіля

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

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

Точка з 2 групами


1
Чим точкова різниця відрізняється від розсіювача з комутованою віссю, одна з яких є категоричною?
DrSAR

4
@DrSAR Чим гістограма відрізняється від діаграми або діаграми щільності, відмінної від лінійної лінії? Ви можете описати багато стандартних типів діаграм з точки зору більш фундаментальних геометрій (пор. Bertin's Semiologie Graphique ), але це не робить уявлення про побудову чогось конкретного способу не менш унікальним. У цьому випадку ви будуєте два фрагменти категоричної інформації (одна вертикально, одна за формою символу побудови графіку) проти однієї частини безперервних даних. Хоча в більшості програмних пакетів ви б зламали розпорошувач, щоб створити його, але найголовніше це не розсип.
Арі Б. Фрідман

2
@ gsk3 Не означав звучати химерно. Насправді я зараз (прочитавши докладніше про граматику графіки та подібні твори) розумію, що ця відмінність вищого рівня може бути досить важливою для презентації. Дякуємо, що показали це.
DrSAR

@DrSAR І я не хотів звучати захисно. Природа коментарів ТА гадаю ;-)
Арі Б. Фрідман

56

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

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

Ось приклад. Цей графік показує середній обсяг відвідування веб-сайту за годиною. Помітьте два шипи о 10 вечорі та о 1 годині ранку. Для мережевих інженерів Сайту це важливо; також важливо, що вони трапляються поблизу один від одного (всього дві години один від одного). Але якщо нанести ті самі дані на традиційну систему координат, ця закономірність була б повністю прихована - лінійно побудована, ці два шипи будуть за 20 годин один від одного, що вони є, хоча вони також мають лише дві години один від одного в наступні дні. Полярна діаграма вище показує це в парсимонізованому та інтуїтивно зрозумілому вигляді (легенда не потрібна).

Полярна діаграма, що показує трафік сайту, з піками в години 1 і 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)

4
Скопіювавши свій код, я отримую зовсім інший сюжет (що досить некрасиво); будь-яка ідея чому? Я отримую це застереження: 1: У as.circular (xx [, 1]): об'єкт примусовий до класу "круговий", використовуючи значення за замовчуванням для таких компонентів: тип: "кутові" одиниці: шаблон "радіани": " немає 'modulo:' asis 'нуль: 0 обертання:' counter 'rose.diagdata24Daily Трафік сайту по Hourthree_palettes
datayoda

У мене така ж проблема.
crayola

Ви можете зробити це і з графіком ліній. Можна прочитати трохи важче, але це може бути справді приголомшливим для більш деталізованих даних або даних, які проходять більше одного циклу (наприклад, графік десяти циклів, а потім графік їх середнього).
naught101

1
У мене також були проблеми з тиражуванням сюжету. Зрештою я вирішив, що легше використовувати ggplot2. Я залишив коротку демонстрацію на Rpubs з кодом та результатами: rpubs.com/mattbagg/circular
MattBagg

1
ggplot2 еквівалент:qplot(y=data, x=1:length(data), fill=factor(1:length(data)), stat='identity', geom='bar') + coord_polar()
naught101

54

Якщо на вашому сюжетному ділянці є стільки точок, що він стає повним безладом, спробуйте розгладити сюжет. Ось приклад:

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.

Смайлик як звичайний або згладжений розсипчастий сюжет


6
Для повноти цього ефекту можна також отримати в ggplot, використовуючи прозорість (альфа).) У поєднанні з точкою geom.
Пол Хіемстра

1
це те саме, що і оцінка щільності ядра, або просто подібне?
ендоліт

30

Що стосується Міні-діаграми та інших Tufte ідеї, YaleToolkit пакет на CRAN забезпечує функцію sparklineі sparklines.

Інший пакет, який корисний для більших наборів даних, - це гексабін, оскільки він вміло « перебиває » дані у відра для роботи з наборами даних, які можуть бути занадто великими для наївних розсіювачів.


4
+1 до іскрових ліній. Зараз я працюю над пакетом, який орієнтований на створення іскрових ліній в R-- вони роблять великі доповнення до таблиць у звітах Sweave.
Шарпі

1
Класно! Я не надто задоволений тим, що Джей має в YaleToolkit, і хотів би мати блискітки в таблицях!
Дірк Еддельбуеттель

Я щойно задокументував спосіб виготовлення блискавок, використовуючи лише plotоновлення мого запитання , за допомогою цього допису на форумі Tufte
Бен

1
Hmisc::latex()Версія виходу з Hmisc::describeвключає в себе міні-гистограмму , яка отримує включена в таблиці.
IRTFM

28

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

Ось приклад (посилання Вікіпедії також показує приклад):

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


3
Сюжети для скрипки також доступні через гратчастий пакет:bwplot(... panel = panel.violin)
Девід Дж.

3
Незабаром з'явиться версія ggplot2 для скрипкових сюжетів. github.com/wch/ggplot2/wiki/geom_violin
Роман Луштрик

Я не тонкі сюжетні скрипки настільки корисні, натомість мені подобається показувати всі крапки.
Накс

25

Ще одна приємна візуалізація часових рядів, яку я щойно рецензував, - це "нерівна діаграма" (про що йдеться у цій публікації в блозі "Навчання R" ). Це дуже корисно для візуалізації змін положення в часі.

Про те, як його створити, можна прочитати на http://learnr.wordpress.com/ , але ось так воно виглядає так:

alt текст


Мені подобається підсумкова діаграма для цих конкретних даних, але важко продумувати більш загальні ситуації, коли це було б корисно. Це сказало, я думаю, що ми всі можемо погодитися, що блог Learning R гойдає шкарпетки.
Ian Fellows

7
Збірна діаграма - це паралельний графік координат ранжированих даних.
Хадлі

1
це нагадує мені схилограф, який підходить для відображення зміни рейтингу у часі або стосунків між рейтингами: charliepark.org/slopegraphs
topchef

21

Мені також подобаються модифікації коробних планок 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
  )

порівнятиплот

У цьому питанні обговорюються й інші способи їх виготовлення (в тому числі інший вид коробки "Tufte") .


@daroczig Дякую Одного дня я перепишу його, щоб прийняти різні конфігурації угруповань. Я багато чому навчився, коли написав цю функцію!
Арі Б. Фрідман

1
Мені подобаються ваші сюжети набагато краще, ніж туфтеві, які смішно важко читати. Я все ще вважаю, що боксерки в стилі Tukey кращі, хоча хороший компроміс може бути чимось на зразок того, що у вас тут, але з 3px широкими лініями для коробки, а не зсувом 1px. І я думаю, що широка горизонтальна лінія для медіани 1px, ймовірно, акуратніша і точніша.
naught101

19

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

  require(fmsb)
  gstem(beaver1$temp)

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



15

Окрім чудової роботи Туфте, я рекомендую книги Вільяма С. Клівленда: Візуалізація даних та елементи графічних даних . Вони не тільки чудові, але все це було зроблено в R, і я вважаю, що код є загальнодоступним.


14

Boxplots! Приклад з довідки R:

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

На мою думку, це найзручніший спосіб швидкого перегляду даних або порівняння розподілів. Для більш складних розподілів існує розширення, яке називається vioplot.



Боксерські майданчики не так вже мало використовуються, чи не так? Я маю на увазі впевнений, що в багатьох паперах барні діаграми використовуються для даних, які слід запустити в коробку, але вони все ще досить поширені.
naught101

11

Мозаїчні сюжети, здається, відповідають усім згаданим чотирма критеріям. Є приклади в r, під mosaicplot.


3
Краща реалізація мозаїчних сюжетів знаходиться в бібліотеці vcd (назва функції 'mosaic'). Він має набагато гнучкіший підпис методу і реалізується в сітці (а не в 'базовій' графічній системі).
дог

10

Ознайомтеся з роботою Едварда Туфте та особливо з цією книгою

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

До речі, мені подобається його техніка візуалізації даних із закрутки. Сюрприз! Google це вже написав і виклав у Google Code


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.