Відображення трьох фрагментів інформації на графіку


15

Примітка: зараз додається 50 балів вихідних даних.

Я хочу відобразити, скільки я проробив, і скільки сторінок я закінчив протягом тижня, розбиваючись по днях, і я зробив так, як показано нижче:введіть тут опис зображення

У мене люди говорили, що вони не можуть зрозуміти графіки, але я не маю уявлення, як ще я можу їх відобразити. Оскільки я, по суті, потребував би три виміри, не роблячи сукупного зображення. Я хочу уникати використання численних лінійних графіків, оскільки через кілька тижнів графіки стануть нерозбірливими. Хіба я нічого не можу зробити?

Як я можу відобразити їх більш чітко?

Date        Total   Total pages
21/11/2014  2.4166   0
22/11/2014  0        0
23/11/2014  1.5833   4
24/11/2014  3.0166  13
25/11/2014  2.4999   6
26/11/2014  1.4833   3
27/11/2014  3.0499   6
28/11/2014  0        0
29/11/2014  2.4499   5
30/11/2014  2.8833   2
 1/12/2014  0        0
 2/12/2014  4.1166   8
 3/12/2014  1.3333   5
 4/12/2014  1.2499   3
 5/12/2014  1.6666   8
 6/12/2014  0        0
 7/12/2014  2.4833   9
29/12/2014  0        0
30/12/2014  1.2332   1
31/12/2014  0.3333   0
 1/01/2015  3.5666   2
 2/01/2015  0.8166   0
 3/01/2015  2.75    28
 4/01/2015  0.4166   0
 5/01/2015  1.2833   0
 6/01/2015  0.3333   3
 7/01/2015  0        0
 8/01/2015  0        0
 9/01/2015  2.35     2
10/01/2015  0.5666   0
11/01/2015  0        0
12/01/2015  1.6666   0
13/01/2015  2.2666   5
14/01/2015  2.5165   6
15/01/2015  2.0166   0
16/01/2015  2.9666   1
17/01/2015  0.8333   0
18/01/2015  0.6666   1
19/01/2015  1.45     0
20/01/2015  0.3166   0
21/01/2015  0        0
22/01/2015  0.2333   0
23/01/2015  0.85     2
24/01/2015  0        0
25/01/2015  0        0
26/01/2015  0.6666   4
27/01/2015  0.8333   1
28/01/2015  1.5498   5
29/01/2015  6.4159   9
30/01/2015  2.9166   0

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

@ NickCox Я міг би відмовитись через кілька тижнів, оскільки я чесно не знаю, як змінитимуться дані, і я пережив лише перші 13 днів їх (3 з яких без дослідження)

@NickCox Як опублікувати вихідні дані?

1
Моя порада - трохи почекайте. Актуалізуючи питання, ви звернули на нього увагу. Подивіться, чи отримаєте ви нові відповіді.
Нік Кокс

1
Що ви хочете показати про ці дані? Яку історію ви хочете розповісти? Що ви намагаєтесь змусити людей зрозуміти ваші дані без графіків?
gung - Відновіть Моніку

Відповіді:


7

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

Це може бути реалізовано дещо просто в Excel при умовному форматуванні, якщо дані розташовані правильно. Зокрема, ви можете побудувати "сітку" значень за допомогою формул, які шукають у вихідних даних. Звідти ви можете використовувати умовне форматування для відображення результату.

Ось як може виглядати результат. Вибачте, що я змінив формат дати. Формула в комірці H1 є: "=IFERROR(VLOOKUP($G$1+$G6*7+H$5, $B$5:$C$16,2,FALSE), 0)". Це робиться певна математика, щоб навести дні в правильному порядку. Сподіваємось, це просто.

Зображення умовного форматування з розташуванням матриць

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

Цей формат дуже схожий на те, як GitHub відображає активність / внески користувачів у часі. Ось один користувач (не я!). введіть тут опис зображення


2
(+1) Мені подобається такий підхід, особливо тому, що він добре підходить для використання в тій же електронній таблиці, з якою вводяться дані. Цей графічний дисплей - це фактично теплова карта . Я регулярно використовую подібні налаштування самостійно, і я вважаю, що одна з слабких сторін полягає в тому, що аспекти тенденцій можуть бути важко виділити, тому може бути добре доповнити це деяким варіантом лінійного графіка, щоб показати більш точну деталізацію (Пітер Флом, Нік Кокс і я все зробив хороші пропозиції).
Срібна рибка

6

Видатною особливістю оригіналу є щотижневі суми. Окремі значення мають сенс лише після того, як ви дізналися кольори, і я думаю, що це велика причина, що сюжет не працює для нових глядачів. З цим пов'язано, що втрачається часовий аспект днів. Послідовний набір квітів може допомогти (наприклад, 7 відтінків синього).

Мені зазвичай не важливо маркувати кожен предмет - чи важливі точні значення? Графік не виконує свою роботу, якщо ви не можете його інтерпретувати без кожного позначеного значення.

На мою спробу . Враховуючи очевидну важливість щотижневих сум, я склав графіки накопичувальних сум за тиждень. Він показує щотижневі суми та дні в порядку часу. Точні значення дня менш чіткі, але зовнішні значення все одно будуть виділятися.

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

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

Я використовував червоний колір, щоб вказати, які тижні були нижче мети для швидкого сканування.

Маючи значно більше тижнів, ви можете організувати їх у сітку, а не у вертикальний список.

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


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

Очевидно, одним із варіантів було б перенаситити обидві серії з вторинною вертикальною віссю для вивчених сторінок, але багато людей мають тверду думку проти цього, наприклад, Хедлі Вікхем навмисно відмовляється реалізувати це в ggplot. Я б взагалі уникав цього робити, але це може мати сенс, якщо для обох є цілі - це вводить природну шкалу для другої осі y, щоб забезпечити цільові області протягом годин та сторінок чітко вирівняні. Це рішення про масштабування, як правило, суперечливе питання з кількома осями y.
Срібна рибка

Дякую @Silverfish! Я також проти двох шкал в одному графіку, але, як ви кажете, якщо обидва можна поставити в одній шкалі відносно відповідних цілей, це може спрацювати. У своїй відповіді я повинен був би сказати, що, показуючи лише один захід, я припускаю, що інший захід буде показаний так само, але в окремих графах. У вертикальній формі списку кожен захід може бути окремим стовпцем графіків.
xan

Це ще одна чудова відповідь. Мені напевно подобається цільова ідея, яку ви застосували. Мені доведеться бачити, що я зараз роблю, коли я переглянув усі відповіді. Дякую

5

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

Якщо це проблема, то ви можете розділити часовий ряд на компоненти:

Щоденні зміни

Тижневий варіант

Довгострокова тенденція

Ще щось.

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

І R, і SAS мають інструменти для цього. Чи маєте ви доступ до будь-якого з них?


У мене на комп'ютері є R, але я його рідко використовував. (Цілком готовий навчитися)

Ну, у нього є крива навчання, але вивчіть функцію декомпозиції (). Можливо, вам доведеться пограти, щоб отримати те, що ви хочете. Крім того, якщо ви можете знайти книги Клівленда, вони видатні.
Пітер Флом - Відновити Моніку

3
Ось приклад Клівленда, який Петро згадав, з док. Я , якщо у вас є R встановлений , ви можете запустити приклад: stat.ethz.ch/R-manual/R-devel/library/stats/html/stl.html
Кіран

@Kieran Правильний вихід? imgur.com/IzRC0h8

5

Я спершу викладу деякі заперечення щодо ваших оригінальних складених або розділених гістограм.

а. Кольорове кодування видається абсолютно довільним. Отже, графік неможливо вивчити без повторного переходу вперед і назад між легендою та графіком.

б. Нулі неявні, як невидимі смуги сегментів. Нулі є частиною варіації.

З цих та інших причин графіки важко розшифрувати.

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

Резервне копіювання: У кожній проблемі є три змінні.

  1. Час, що вивчається, або сторінки заповнені

  2. День тижня.

  3. Номер тижня.

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

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


Дякую за дуже приємне посилання. Один коментар до Вашого заперечення: дні насправді складаються з (знизу вгору) п’ятниця-> четвер, але деякі дні пропущені, безумовно, є важливим питанням щодо читабельності.

Дійсно, але людям досі потрібно використовувати легенду для розшифровки.
Нік Кокс

R має команду monthplot, яку фактично можна використовувати на щотижневих даних - див. Stackoverflow.com/questions/5826703/…
Silverfish

5

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

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

Оновлення, щоб включити графіки

Лінійні графіки для ковзаючих середніх

Графік електронних таблиць для середніх семиденних котируючих середніх показників не є видовищним, але, здається, робить свою роботу добре - щоденні зміни згладжуються, тому тенденції легше виявити (порівняно з еквівалентною денною діаграмою, яка настільки галаслива, що незрозуміла). Цей сюжет добре виокремлено деякі ключові особливості: наприклад, велика кількість робіт була проведена в середині січня щогодини, але це не супроводжувалося пропорційним збільшенням середніх сторінок, що закінчуються за день. Перерва на Різдво дуже видно, і якщо окремі точки даних чітко промальовані, то це не надто вводить в оману (якби тільки видно рядок, було б неможливо визначити, що рівний період був через брак даних!). Тим не менш, я настійно рекомендую включити1.5 години на тиждень на перерві.

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

Щоб відтворити мої формули, вставте це так, щоб "Дата" була у комірці A1:

Date    Hours   Pages   7-day rolling hours 7-day rolling pages
25/11/14    2.4999  6       
26/11/14    1.4833  3       
27/11/14    3.0499  6       
28/11/14    0   0       
29/11/14    2.4499  5       
30/11/14    2.8833  2       
01/12/14    0   0   =AVERAGE(B2:B8) =AVERAGE(C2:C8)
02/12/14    4.1166  8   =AVERAGE(B3:B9) =AVERAGE(C3:C9)
03/12/14    1.3333  5   =AVERAGE(B4:B10)    =AVERAGE(C4:C10)
04/12/14    1.2499  3   =AVERAGE(B5:B11)    =AVERAGE(C5:C11)
05/12/14    1.6666  8   =AVERAGE(B6:B12)    =AVERAGE(C6:C12)
06/12/14    0   0   =AVERAGE(B7:B13)    =AVERAGE(C7:C13)
07/12/14    2.4833  9   =AVERAGE(B8:B14)    =AVERAGE(C8:C14)
29/12/14    0   0   =AVERAGE(B9:B15)    =AVERAGE(C9:C15)
30/12/14    1.2332  1   =AVERAGE(B10:B16)   =AVERAGE(C10:C16)
31/12/14    0.3333  0   =AVERAGE(B11:B17)   =AVERAGE(C11:C17)
01/01/15    3.5666  2   =AVERAGE(B12:B18)   =AVERAGE(C12:C18)
02/01/15    0.8166  0   =AVERAGE(B13:B19)   =AVERAGE(C13:C19)
03/01/15    2.75    28  =AVERAGE(B14:B20)   =AVERAGE(C14:C20)
04/01/15    0.4166  0   =AVERAGE(B15:B21)   =AVERAGE(C15:C21)
05/01/15    1.2833  0   =AVERAGE(B16:B22)   =AVERAGE(C16:C22)
06/01/15    0.3333  3   =AVERAGE(B17:B23)   =AVERAGE(C17:C23)
07/01/15    0   0   =AVERAGE(B18:B24)   =AVERAGE(C18:C24)
08/01/15    0   0   =AVERAGE(B19:B25)   =AVERAGE(C19:C25)
09/01/15    2.35    2   =AVERAGE(B20:B26)   =AVERAGE(C20:C26)
10/01/15    0.5666  0   =AVERAGE(B21:B27)   =AVERAGE(C21:C27)
11/01/15    0   0   =AVERAGE(B22:B28)   =AVERAGE(C22:C28)
12/01/15    1.6666  0   =AVERAGE(B23:B29)   =AVERAGE(C23:C29)
13/01/15    2.2666  5   =AVERAGE(B24:B30)   =AVERAGE(C24:C30)
14/01/15    2.5165  6   =AVERAGE(B25:B31)   =AVERAGE(C25:C31)
15/01/15    2.0166  0   =AVERAGE(B26:B32)   =AVERAGE(C26:C32)
16/01/15    2.9666  1   =AVERAGE(B27:B33)   =AVERAGE(C27:C33)
17/01/15    0.8333  0   =AVERAGE(B28:B34)   =AVERAGE(C28:C34)
18/01/15    0.6666  1   =AVERAGE(B29:B35)   =AVERAGE(C29:C35)
19/01/15    1.45    0   =AVERAGE(B30:B36)   =AVERAGE(C30:C36)
20/01/15    0.3166  0   =AVERAGE(B31:B37)   =AVERAGE(C31:C37)
21/01/15    0   0   =AVERAGE(B32:B38)   =AVERAGE(C32:C38)
22/01/15    0.2333  0   =AVERAGE(B33:B39)   =AVERAGE(C33:C39)
23/01/15    0.85    2   =AVERAGE(B34:B40)   =AVERAGE(C34:C40)
24/01/15    0   0   =AVERAGE(B35:B41)   =AVERAGE(C35:C41)
25/01/15    0   0   =AVERAGE(B36:B42)   =AVERAGE(C36:C42)
26/01/15    0.6666  4   =AVERAGE(B37:B43)   =AVERAGE(C37:C43)
27/01/15    0.8333  1   =AVERAGE(B38:B44)   =AVERAGE(C38:C44)
28/01/15    1.5498  5   =AVERAGE(B39:B45)   =AVERAGE(C39:C45)
29/01/15    6.4159  9   =AVERAGE(B40:B46)   =AVERAGE(C40:C46)
30/01/15    2.9166  0   =AVERAGE(B41:B47)   =AVERAGE(C41:C47)

5

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

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

data <- rbind(data.frame(Date = c("17/11/2014", "18/11/2014", "19/11/2014", "20/11/2014"),
                         Total = rep(0, 4),
                         Pages = rep(0, 4)), 
              data,
              data.frame(Date = c("31/01/2015", "01/02/2015"),
                         Total = c(0, 0),
                         Pages = c(0, 0)))

n <- dim(data)[1]

data$Date <- as.Date(data$Date, format = "%d/%m/%Y")
data$weekday <- factor(rep(c("Monday", "Tuesday", "Wednesday", "Thursday",
                             "Friday", "Saturday", "Sunday"), length.out = n))
data$weekday <- factor(data$weekday, levels(data$weekday)[c(2,6,7,5,1,3,4)])
data$week <- factor(rep(seq(from = 0, to = ceiling(((n - 3)/7))), 
                        each = 7, length.out = n))

ggplot(data = data, aes(x = week, y = Pages)) + 
  geom_bar(aes(fill = weekday), stat = "identity", position = "dodge") + 
  labs(fill = NULL) + xlab(NULL) + ylab("Number of pages") + 
  geom_bar(stat = "identity", alpha = 0.2) + theme(panel.background = element_blank()) +
  scale_x_discrete(labels = paste("Week", seq(from = 0, to = 7)))

Висота сірих смуг вказує на суму тижнів сторінок.

Це явно не ідеально. Сірі смуги переважають значною мірою, оскільки вони порівняно з денним баром мають більшу площу для тієї ж кількості читання. Ми могли б зробити їх тоншими, але мені подобається те, як вони розмежовують тижні. Вони досить добре вказують, які дні перебувають в одному тижні - те, що не обов'язково може бути зрозумілим інакше. Тим більше, що маємо нульовий підрахунок.

У наступному сюжеті я використав середню кількість сторінок (протягом тижня) як висоту сірої смуги.

Висота сірих смуг вказує на середню тиждень сторінок.

Це, мабуть, краще відображає дані. Однак зауважте, що 0 та 7 тижня вводять в оману, оскільки вони не включали 7 днів. Ви могли легко обійти це.

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

Поєднання часу та сторінок у сюжетному сюжеті.

EDIT: Розуміючи, що кольори дійсно не так потрібні, і натхненний xan (див. Нижче коментарі), ви можете спростити сюжет до чогось подібного. Я позначив «Thurdays», щоб отримати додатковий наочний посібник. Ви також можете заперечувати за те, щоб використовувати один і той же колір для всіх барів, щоб не переоцінювати деякі (довільні) дні.

Більш проста версія.

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

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

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

Також зауважте, що я переплутав дні в першій версії. Я виправив код і сюжети, і зараз поїду займатися сім днів тижня.

Код, який створив останній сюжет:

data$normPages <- data$Pages/mean(data$Pages)
data$normTotal <- data$Total/mean(data$Total)

data$weekNormPages <- data$Pages/(7*mean(data$Pages))
data$weekNormTotal <- data$Total/(7*mean(data$Total))

pTop <- ggplot(data = data, aes(x = week)) + geom_bar(aes(linetype = weekday, y = normPages), 
                                                      stat = "identity", position = "dodge", 
                                                      fill = "dodgerblue") + labs(fill = NULL) +
  xlab(NULL) + ylab("Number of pages") + geom_bar(aes(y = weekNormPages), stat = "identity", alpha = 0.3) + 
  theme(panel.background = element_blank(), axis.ticks.length=unit(0,"cm")) + guides(linetype = FALSE) +
  scale_x_discrete(labels = paste("Week", seq(from = 0, to = 7))) + ylab(NULL) + 
  annotate("text", label = "Pages read", x = "1", y = 10) +
  theme(plot.margin = unit(c(1,.5,.1,.8), "cm")) + geom_hline(yintercept = 1)
pTop

pBot <- ggplot(data = data, aes(x = week)) + geom_bar(aes(linetype = weekday, y = normTotal), 
                                                      stat = "identity", position = "dodge", fill = "dodgerblue") + 
  labs(fill = NULL) +
  xlab(NULL) + ylab("Number of hours") + geom_bar(aes(y = weekNormPages), stat = "identity", alpha = 0.3) + 
  theme(panel.background = element_blank(), axis.ticks.length=unit(0,"cm")) + guides(linetype = FALSE) + 
  scale_x_discrete(labels = NULL) + guides(fill = FALSE) + ylab(NULL) + scale_y_reverse() + 
  theme(plot.margin = unit(c(.1,.5,1,.8), "cm")) + 
  annotate("text", label = "Time spent", x = "1", y = 4) + geom_hline(yintercept = 1)
pBot

grid.arrange(pTop, pBot, heights = c(.5, .5), widths = c(0.5, 0.1))

Це здається найбільше в дусі вдосконалення оригіналу, і мені подобається ідея. Мені не подобаються довільні / веселкові кольори ні в оригіналі, ні у ваших. Спробуйте послідовний набір кольорів. Перекладені бруси теж не працюють для мене.
xan

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

Тепер, коли згадка про кольори є неважливою, мені здається, що видалення варіації кольорів може спрацювати. Дні тижня вже відрізняються місцем розташування. А може просто зробити середу іншим відтінком як додатковий якір.
xan

Дуже хороша! Я ще не переглянув інших відповідей, але це, безумовно, вже велике поліпшення! Дуже дякую

1
Я відредагував відповідь, щоб включити ідеї з коментарів. @Приймаючи виклик, я радий, що ви вважаєте його корисним.
swmo

1

Зміна х вісь до буднів, нехай у те саме і:

  1. побудувати графік даних у вигляді рядків з двома тижнями як групування змінних - щоб отримати два окремих рядки на кожен тиждень,
  2. або скористайтеся згрупованими сюжетними смугами, де на кожен тиждень у вас є два бари за тиждень 1 та тиждень 2, кожен з яких має кількість сторінок / годин на день.

Будь ласка, подивіться, що 1. робить вище, а 2. не здається дуже значущим. Спасибі за вашу відповідь.

Я не бачу проблем з цим ... Це не виглядає приємно, але це питання програмного забезпечення, яке ви використовуєте та / або графічного редагування.
Тім

1.Ви насправді не можете сказати, чи покращиться 1 або 2 тиждень, і якщо ще кілька тижнів додадуть, це стане занадто хаотично. 2. Я насправді не проти цього, це насправді досить приємно. Можливо, я міг би поставити оригінал і цей разом, щоб зробити його більш зрозумілим. (Також показано вище вище)

1

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

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

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

library(lubridate)
library(dplyr)
library(reshape2)
library(ggplot2)
library(scales)

# Ordered vector of weekdays
weekdayVec = c("Sunday","Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")

# Change column name
names(dat)[2] = "Hours of Study"

# Convert Date to date format
dat$Date = as.Date(dmy(dat$Date))

# Add a weekday variable and order from Sunday to Saturday
dat$Day = weekdays(dat$Date)
dat$Day = factor(dat$Day, levels=weekdayVec)

# Number the weeks from 1 to 11 and convert to a factor
dat$Week = paste("Week", (as.numeric(dat$Date) - as.numeric(dat$Date[3])) %/% 7 + 2)
dat$Week = factor(dat$Week, levels=paste("Week", c(1:11))) 

## Fill in empty dates (so we can show zero pages/hours during weeks 5 and 6 if we want)
dataFill = expand.grid(Week = paste("Week",1:11), Day=weekdayVec)
dat = merge(dataFill, dat, by=c("Week","Day"), all=TRUE)

# Fill in missing dates
dat$Date = as.Date(c(rep(NA,5), seq(as.Date("2014-11-21"),as.Date("2015-01-30"),1), NA))

# Convert missing data to zeros for Hours of Study and Total Pages
dat = dat %>% mutate(`Hours of Study` = ifelse(is.na(`Hours of Study`), 0, `Hours of Study`),
               `Total Pages` = ifelse(is.na(`Total Pages`), 0, `Total Pages`)) 

# Melt data into long format (for facetting in ggplot2)
dat.m = dat %>% melt(id.var=1:3) %>%
  group_by(Week, variable) %>%
  mutate(cumValue = cumsum(value))

# Plot Hours and Pages by date, with separate cumulative 
# curves for each week
ggplot(dat.m %>% group_by(Week, variable) %>% arrange(Week, Day), 
       aes(Date, cumValue, colour=Week, group=Week)) +
  geom_vline(xintercept=as.numeric(seq(as.Date("2014-11-16"), as.Date("2015-02-06"), 7)-0.5), colour="grey70") +
  geom_line(position=position_dodge(width=0.5)) +
  geom_point(size=2.5, position=position_dodge(width=0.5)) +
  facet_grid(variable ~ ., scales="free_y") +
  guides(colour=guide_legend(reverse=TRUE)) + labs(y="",x="") +
  guides(colour=FALSE) +
  scale_x_date(limits=c(as.Date("2014-11-16"),as.Date("2015-01-31")),
               breaks=seq(as.Date("2014-11-16"),as.Date("2015-01-31"), 7)-0.5,
               labels=paste("                  Week",1:11)) +
  theme_grey(base_size=15)

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

0

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

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


0

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

Насправді, що було б дуже цікаво спробувати, коли кожна ліво-права та вгору вниз (як показано в цьому куті) відповідають одному і тому ж дню тижня (наприклад, понеділок), а потім розміщувати коробки на нижній і задній правій стіні ліній електропередач. Рамки для огляду відповідали б загальній кількості годин та загальній кількості сторінок за кожен тиждень відповідно. Я майже впевнений, що можна було б зробити з rgl, але потребував би певного поводження. Можливо, того варто. Скрипкові сюжети чи фасолі може бути ще краще.

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

Дані (для введення в R):

dat<-structure(list(Date = structure(c(17L, 19L, 21L, 23L, 25L, 27L, 
29L, 31L, 33L, 38L, 2L, 14L, 36L, 42L, 44L, 46L, 48L, 34L, 39L, 
40L, 1L, 13L, 35L, 41L, 43L, 45L, 47L, 49L, 50L, 3L, 4L, 5L, 
6L, 7L, 8L, 9L, 10L, 11L, 12L, 15L, 16L, 18L, 20L, 22L, 24L, 
26L, 28L, 30L, 32L, 37L), .Label = c("1/1/2015", "1/12/2014", 
"10/1/2015", "11/1/2015", "12/1/2015", "13/01/2015", "14/01/2015", 
"15/01/2015", "16/01/2015", "17/01/2015", "18/01/2015", "19/01/2015", 
"2/1/2015", "2/12/2014", "20/01/2015", "21/01/2015", "21/11/2014", 
"22/01/2015", "22/11/2014", "23/01/2015", "23/11/2014", "24/01/2015", 
"24/11/2014", "25/01/2015", "25/11/2014", "26/01/2015", "26/11/2014", 
"27/01/2015", "27/11/2014", "28/01/2015", "28/11/2014", "29/01/2015", 
"29/11/2014", "29/12/2014", "3/1/2015", "3/12/2014", "30/01/2015", 
"30/11/2014", "30/12/2014", "31/12/2014", "4/1/2015", "4/12/2014", 
"5/1/2015", "5/12/2014", "6/1/2015", "6/12/2014", "7/1/2015", 
"7/12/2014", "8/1/2015", "9/1/2015"), class = "factor"), TotalHours = c(2.4166, 
0, 1.5833, 3.0166, 2.4999, 1.4833, 3.0499, 0, 2.4499, 2.8833, 
0, 4.1166, 1.3333, 1.2499, 1.6666, 0, 2.4833, 0, 1.2332, 0.3333, 
3.5666, 0.8166, 2.75, 0.4166, 1.2833, 0.3333, 0, 0, 2.35, 0.5666, 
0, 1.6666, 2.2666, 2.5165, 2.0166, 2.9666, 0.8333, 0.6666, 1.45, 
0.3166, 0, 0.2333, 0.85, 0, 0, 0.6666, 0.8333, 1.5498, 6.4159, 
2.9166), TotalPages = c(0L, 0L, 4L, 13L, 6L, 3L, 6L, 0L, 5L, 
2L, 0L, 8L, 5L, 3L, 8L, 0L, 9L, 0L, 1L, 0L, 2L, 0L, 28L, 0L, 
0L, 3L, 0L, 0L, 2L, 0L, 0L, 0L, 5L, 6L, 0L, 1L, 0L, 1L, 0L, 0L, 
0L, 0L, 2L, 0L, 0L, 4L, 1L, 5L, 9L, 0L)), .Names = c("Date", 
"TotalHours", "TotalPages"), class = "data.frame", row.names = c(NA, 
-50L))

Складіть сюжет:

#Get Day of Week
dat<-cbind(weekdays(as.Date(dat[,1], format="%d/%m/%Y")),dat)
colnames(dat)[1]<-"DoW"

#3D Plot
require(rgl)
plot3d(dat[,2],dat[,3],dat[,4],size=15, 
xlab=colnames(dat)[2], ylab=colnames(dat)[3],
zlab=colnames(dat)[4],col=rainbow(7)[as.numeric(dat[,1])])
text3d(x=10, y=6, z=seq(25,15,length=7),levels(dat[,1]),
col=rainbow(7), font=2)
grid3d(side=c("x", "y+", "z"), lwd=1)

-1

Наступна теплова карта з номером тижня (року), днем ​​тижня та гранями годин та сторінок може бути корисною:

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

Видалення 2 високих значень дає кращі градієнти кольорів на ділянці:

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

Наступна діаграма також може бути корисною.

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

Це чітко показує 2-тижневий період, коли жодної роботи не робилося.

Сюжет з лініями також може бути корисним (рядки не захаращені; точки також можна видалити, зберігаючи лише два рядки)

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

Вони чітко передають інформацію, одночасно спрощуючи сюжет для легкого розуміння.

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