Menampilkan tiga potong informasi pada grafik

15

Catatan: 50 titik data mentah dilampirkan sekarang.

Saya ingin menampilkan berapa banyak pembelajaran yang telah saya lakukan, dan berapa banyak halaman yang telah saya selesaikan sepanjang minggu, dibagi berdasarkan hari, dan saya telah melakukannya seperti yang ditunjukkan di bawah ini:masukkan deskripsi gambar di sini

Saya memiliki orang-orang yang mengatakan kepada saya bahwa mereka tidak dapat memahami grafik, tetapi saya tidak tahu bagaimana lagi saya bisa menampilkannya. Karena saya pada dasarnya akan membutuhkan tiga dimensi tanpa membuat penggambaran kumulatif. Saya ingin menghindari menggunakan banyak grafik garis, karena setelah beberapa minggu grafik tersebut menjadi tidak terbaca. Apakah tidak ada yang bisa saya lakukan?

Bagaimana saya bisa menampilkan ini dengan lebih jelas?

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
gung - Pasang kembali Monica
sumber
Jika Anda dapat memposting data sampel, mereka yang tertarik dapat bermain dan menunjukkan solusi mereka kepada Anda. Agar realistis, perlu beberapa minggu, karena esensi masalahnya adalah apa yang terjadi ketika jumlah minggu meningkat.
Nick Cox
@NickCox Saya dapat memposting ulang dalam beberapa minggu karena saya jujur ​​tidak yakin bagaimana data akan berubah dan saya hanya hidup selama 13 hari pertama sejauh ini (3 di antaranya tanpa penelitian)
@NickCox Bagaimana cara mengirim data mentah?
1
Saran saya tunggu sebentar. Dengan memperbarui pertanyaan, Anda telah menarik perhatian padanya. Lihat apakah Anda mendapat jawaban baru.
Nick Cox
1
Apa yang ingin Anda tampilkan tentang data ini? Cerita apa yang ingin Anda sampaikan? Apa yang Anda coba untuk membuat orang mengerti tentang data Anda dengan grafik batang?
gung - Reinstate Monica

Jawaban:

7

Salah satu cara memvisualisasikan data berdasarkan tanggal / kalender adalah melalui tampilan matriks yang mengkodekan data dengan warna. Matriks (atau tabel) diatur sehingga baris mewakili minggu dan kolom mewakili hari. Anda dapat menambahkan kolom terakhir untuk total mingguan jika diinginkan.

Ini dapat diimplementasikan agak sederhana di Excel dengan pemformatan bersyarat jika data disusun dengan benar. Secara khusus, Anda dapat membangun "kisi" nilai dengan rumus yang mencari data asli Anda. Dari sana, Anda dapat menggunakan pemformatan bersyarat untuk menampilkan hasilnya.

Berikut ini hasilnya. Maaf saya mengubah format tanggal. Rumus dalam sel H1 adalah: "=IFERROR(VLOOKUP($G$1+$G6*7+H$5, $B$5:$C$16,2,FALSE), 0)". Melakukan beberapa matematika untuk mendapatkan hari-hari dalam urutan yang benar. Semoga ini mudah.

Gambar pemformatan bersyarat dengan susunan matriks

Jika Anda benar-benar ingin mendorong amplop, Anda dapat menggunakan kerangka kerja seperti d3 dan plugin kalendernya untuk menampilkan data ini. Itu mungkin lebih dari sebuah usaha daripada nilainya sekalipun.

Format ini sangat mirip dengan bagaimana GitHub menampilkan aktivitas / kontribusi pengguna dari waktu ke waktu. Ini satu pengguna (bukan saya!). masukkan deskripsi gambar di sini

Byron Wall
sumber
2
(+1) Saya suka pendekatan ini, terutama karena sangat cocok untuk digunakan dalam spreadsheet yang sama dengan data yang dimasukkan. Tampilan grafis ini secara efektif merupakan peta panas . Saya sendiri secara teratur menggunakan set-up yang sama, dan saya menemukan satu kelemahan adalah bahwa aspek tren bisa sulit untuk dipilih, sehingga bisa baik untuk melengkapi ini dengan beberapa varian grafik garis untuk menunjukkan detail yang lebih halus (Peter Flom, Nick Cox dan saya semua telah membuat saran yang bagus).
Silverfish
6

Fitur utama dari yang asli adalah jumlah mingguan. Nilai-nilai individual menjadi bermakna hanya setelah Anda mempelajari warna-warnanya, dan saya membayangkan itulah alasan utama mengapa plot ini tidak berfungsi untuk pemirsa baru. Terkait dengan itu, aspek waktu hari-hari hilang. Sebuah berurutan set warna dapat membantu (misalnya, 7 nuansa biru).

Saya biasanya tidak peduli untuk memberi label pada setiap item - apakah nilai yang tepat itu penting? Grafik tidak melakukan tugasnya jika Anda tidak dapat menafsirkannya tanpa setiap nilai diberi label.

Aktif untuk saya coba . Mengingat pentingnya jumlah mingguan, saya telah merencanakan jumlah kumulatif mingguan. Ini menunjukkan jumlah mingguan dan hari-hari dalam urutan waktu. Nilai hari yang tepat kurang jelas, tetapi nilai outlier akan tetap menonjol.

Untuk jenis plot garis kecil ini (yang dapat direduksi menjadi ukuran sparkline ), sebaiknya memiliki garis referensi atau area. Sebagai ilustrasi, saya telah menambahkan rentang target. Jika target tidak sesuai, maka referensi bisa berupa kisaran selama tiga minggu terakhir atau beberapa nilai referensi tetap.

masukkan deskripsi gambar di sini

Saya menggunakan warna merah untuk menunjukkan minggu mana yang di bawah target untuk pemindaian cepat.

Dengan lebih banyak minggu, Anda dapat mengaturnya menjadi kisi-kisi daripada daftar vertikal.

masukkan deskripsi gambar di sini

xan
sumber
Saya pikir ini luar biasa. Apakah ada cara yang efektif untuk menggabungkan jam belajar dan halaman informasi yang dicakup, yang (setidaknya saya mendapatkan kesan) tampaknya menjadi salah satu tujuan utama latihan? Saya menduga itu akan cukup efektif dalam grafik pertama untuk memiliki "jam belajar" dan "halaman selesai" back-to-back (yaitu jam belajar diplot di kolom kiri tahun minggu, dan halaman selesai di kolom kanan tahun minggu) ). Tapi saya tidak yakin apa yang akan bekerja dengan baik di grafik kedua.
Silverfish
Jelas satu solusi adalah overplot kedua seri dengan sumbu vertikal sekunder untuk halaman yang dipelajari, tetapi banyak orang memiliki pendapat yang kuat terhadap hal ini, misalnya Hadley Wickham dengan sengaja menolak untuk mengimplementasikannya di ggplot. Saya biasanya akan menghindari melakukan ini, tetapi mungkin masuk akal jika ada target untuk keduanya - ini akan memperkenalkan skala alami untuk sumbu y sekunder, untuk memastikan area target selama berjam-jam dan halaman sejajar dengan rapi. Keputusan penskalaan itu umumnya merupakan masalah kontroversial dengan banyak sumbu-y.
Silverfish
Terima kasih @ Silververfish! Saya juga menolak untuk dua skala dalam satu grafik, tetapi seperti yang Anda katakan jika keduanya dapat diletakkan pada skala yang sama relatif terhadap target masing-masing, itu mungkin berhasil. Saya seharusnya mengatakan secara eksplisit dalam jawaban saya bahwa dengan hanya menampilkan satu ukuran saya berasumsi ukuran lain akan ditampilkan dengan cara yang sama tetapi dalam grafik terpisah. Dalam formulir daftar vertikal, setiap ukuran bisa berupa kolom grafik yang terpisah.
xan
Ini adalah jawaban bagus lainnya. Saya sangat menyukai ide target yang telah Anda terapkan. Saya harus melihat apa yang saya lakukan sekarang karena saya telah melihat semua jawaban. Terima kasih
5

Jika saya memahami Anda dengan benar, alasan Anda tidak ingin menggunakan grafik garis adalah karena Anda memiliki terlalu banyak minggu dan grafiknya akan berantakan.

Jika ini masalahnya, maka Anda dapat membagi deret waktu menjadi komponen:

Variasi harian

Variasi mingguan

Tren jangka panjang

Ada yang lain.

William S. Cleveland menunjukkan contoh yang bagus tentang hal ini di salah satu bukunya (saya tidak di kantor saya dan tidak dapat mengingat mana di antara bukunya yang memiliki contoh tetapi itu adalah Visualisasi data atau Unsur-unsur data grafik ).

Baik R dan SAS memiliki alat untuk melakukan ini. Apakah Anda memiliki akses ke keduanya?

Peter Flom - Pasang kembali Monica
sumber
Saya memiliki R di komputer saya, tetapi saya jarang menggunakannya (sepenuhnya bersedia untuk belajar)
Yah, memang memiliki kurva belajar tetapi melihat ke dalam fungsi decompose (). Anda mungkin harus melakukan beberapa permainan untuk mendapatkan apa yang Anda inginkan. Juga, jika Anda dapat menemukan buku-buku Cleveland, mereka luar biasa.
Peter Flom - Reinstate Monica
3
Inilah contoh Cleveland yang disebutkan Peter, dari R docs. Saya jika Anda telah menginstal R Anda dapat menjalankan contoh: stat.ethz.ch/R-manual/R-devel/library/stats/html/stl.html
Kieran
@Kieran Output yang benar? imgur.com/IzRC0h8
5

Pertama-tama saya akan mengemukakan beberapa keberatan terhadap grafik batang asli Anda yang telah ditumpuk atau dibagi.

Sebuah. Pengodean warna tampak sepenuhnya sewenang-wenang. Karenanya grafik tidak dapat dipelajari tanpa berulang kali bolak-balik antara legenda dan grafik.

b. Nol adalah implisit, sebagai segmen bar yang tidak terlihat. Nol adalah bagian dari variasi.

Karena alasan-alasan tersebut dan lainnya, grafik sulit untuk diuraikan.

Yang mengatakan, grafik pantas jika minat sebagian besar dalam mempelajari variasi total dari minggu ke minggu. Banyak minggu dapat diplot sebagai banyak bar. Kelemahan yang sesuai adalah bahwa akan semakin sulit untuk mempelajari variasi dalam beberapa minggu.

Mencadangkan: Ada tiga variabel di sini di setiap masalah.

  1. Waktu dipelajari atau halaman selesai.

  2. Hari dalam seminggu.

  3. Nomor minggu.

Dengan bertambahnya jumlah minggu, grafik apa pun akan menjadi lebih terperinci. Tantangannya adalah menjaga detail itu tetap terkendali.

Saya akan mempertimbangkan plot siklus (nama lain telah digunakan dalam literatur, tetapi kebanyakan merujuk pada penggunaannya untuk melihat variasi musiman). Ada pengantar yang jelas di sini oleh Naomi Robbins . Contohnya termasuk yang seperti milik Anda di mana minatnya adalah variasi di dalam dan di antara minggu.

Nick Cox
sumber
Terima kasih atas tautannya yang sangat bagus. Satu komentar tentang keberatan Anda, hari-hari sebenarnya ditumpuk dari (bawah ke atas) Jumat-> Kamis, tetapi beberapa hari yang hilang jelas merupakan keprihatinan yang valid dalam hal keterbacaan.
Memang, tetapi orang masih perlu menggunakan legenda untuk memecahkan kode.
Nick Cox
R memiliki perintah monthplot yang sebenarnya dapat digunakan pada data mingguan - lihat stackoverflow.com/questions/5826703/…
Silverfish
5

Grafik garis mungkin akan lebih mudah untuk ditafsirkan jika Anda mengambil rata-rata bergerak tujuh hari, empat belas hari atau mungkin 28 hari. Itu akan memuluskan mereka dan masih memungkinkan Anda untuk melihat tren.

Ini memiliki beberapa kesamaan dengan solusi Peter Flom, meskipun agak lebih sederhana dan karenanya tidak memberi gambaran yang cukup lengkap - tetapi mungkin cukup untuk kebutuhan Anda. Jika Anda merekam data Anda dalam spreadsheet, itu memiliki keuntungan bahwa rata-rata seperti itu dapat dengan mudah dilakukan dalam spreadsheet itu sendiri dengan mengatur beberapa rumus, dan grafik akan secara otomatis diperbarui saat Anda mengisi data baru.

Perbarui untuk menyertakan grafik

Grafik garis untuk rata-rata bergerak

Grafik spreadsheet untuk rata-rata bergulir tujuh hari tidak spektakuler tetapi tampaknya melakukan tugasnya dengan baik - variasi harian diperlancar sehingga tren lebih mudah untuk dideteksi (dibandingkan dengan grafik harian setara yang sangat bising sehingga tidak dapat dipahami). Beberapa fitur utama dipilih dengan baik oleh plot ini: misalnya, sejumlah besar pekerjaan dilakukan pada pertengahan Januari, dalam hitungan per jam, tetapi ini tidak disertai dengan kenaikan proporsional pada halaman rata-rata yang diselesaikan per hari. Istirahat Natal sangat terlihat dan selama masing-masing titik data jelas diplot maka itu tidak terlalu menyesatkan (jika hanya garis yang terlihat, tidak mungkin untuk menentukan bahwa periode datar disebabkan oleh kurangnya data!). Namun demikian, saya sangat merekomendasikan untuk memasukkanhari istirahat dalam tabel, meskipun dengan nol jam dan nol halaman. Grafik kemudian dapat merespons hal ini, daripada mengarahkan kursor1.5

Dengan hanya lima puluh item data, tampaknya tidak layak untuk dicoba rata-rata dalam periode waktu yang lebih lama untuk mendeteksi tren yang berjalan lebih lama. Demikian pula saya curiga bahwa ide bagus Peter Flom mengenai dekomposisi musiman akan bergumul dengan data yang terbatas. Jika Anda melakukan dekomposisi dalam spreadsheet Anda, akan lebih penting lagi untuk memasukkan break sebagai nol data.

Untuk mereproduksi formula saya, rekatkan ini sehingga 'Tanggal' ada di sel 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)
Gegat
sumber
5

Saat saya memahami pertanyaan Anda, akan layak untuk menampilkan jam dan halaman secara terpisah. Saya akan melakukannya dulu. Setelah itu, saya akan menampilkan Total dan Halaman dalam satu plot. Saya menduga bahwa angka sebenarnya bukan hal yang paling penting - lebih penting untuk mendapatkan gambaran tentang minggu dan hari kerja, yang produktif dan yang tidak. Dalam hal ini, saya sarankan Anda menjaga struktur temporal alami karena sebenarnya hanya ada satu dimensi temporal dalam data Anda. Kami masih dapat menemukan cara untuk membatasi minggu.

Saya menggunakan kode-R berikut dan paket-ggplot2 untuk menghasilkan plot pertama ini. Data Anda telah dimuat ke data objek dalam kode di bawah ini. Plot adalah plot bar yang dikelompokkan, dengan bar abu-abu menunjukkan jumlah halaman mingguan.

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)))

Ketinggian bilah abu-abu menunjukkan jumlah halaman minggu.

Ini jelas tidak sempurna. Bilah abu-abu mendominasi banyak karena mereka dibandingkan dengan bilah hari memiliki area yang lebih besar untuk jumlah bacaan yang sama. Kita bisa membuatnya lebih tipis, tapi saya suka cara mereka membatasi minggu. Mereka menunjukkan dengan cukup baik hari-hari mana dalam minggu yang sama - sesuatu yang tidak harus dipahami sebaliknya. Terutama karena kita tidak menghitung.

Dalam plot berikutnya, saya telah menggunakan jumlah rata-rata halaman (dalam minggu) sebagai ketinggian bilah abu-abu.

Ketinggian bilah abu-abu menunjukkan rata-rata minggu halaman.

Ini mungkin mewakili data yang lebih baik. Namun, perhatikan bahwa minggu 0 dan 7 menyesatkan karena mereka tidak termasuk 7 hari. Anda dapat dengan mudah mengatasi ini.

Jika Anda bersikeras menampilkan halaman dan waktu secara bersamaan, Anda bisa melakukan plot bar back-to-back. Mungkin sedikit membingungkan karena dua skala vertikal tidak sama. Di sisi lain, mungkin lebih baik membandingkan waktu yang dihabiskan dan pekerjaan yang dilakukan secara langsung seperti ini.

Menggabungkan waktu dan halaman dalam plot back-to-back.

EDIT: Menyadari bahwa warna benar-benar tidak diperlukan sebanyak itu dan terinspirasi oleh xan (lihat komentar di bawah), Anda dapat menyederhanakan plot menjadi sesuatu seperti ini. Saya telah menandai hari Kamis untuk memberikan panduan visual tambahan. Anda juga bisa berdebat mendukung penggunaan warna yang sama untuk semua bar untuk tidak terlalu menekankan beberapa hari (sewenang-wenang).

Versi yang lebih sederhana.

Pada catatan terakhir, Anda juga bisa mencoba menskalakan sumbu secara berbeda dengan membagi nilai Anda dengan nilai rata-rata. Ini akan membuat 1 nilai "normal". Kita bisa memasukkan garis pada 1 untuk menekankan poin ini - sekarang dilakukan pada plot back-to-back. Ini memisahkan "baik" dari hari "buruk" dalam hal beban kerja rata-rata.

masukkan deskripsi gambar di sini

Pada plot ini kita juga dapat memastikan bahwa satu unit sesuai dengan jarak yang sama pada kedua sumbu karena mereka sebanding sekarang.

Perhatikan juga bahwa saya mengacaukan hari-hari di versi pertama. Saya telah memperbaiki kode dan plot dan saya akan berlatih tujuh hari dalam seminggu sekarang.

Kode yang menghasilkan plot terakhir:

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))
swmo
sumber
Ini tampaknya paling dalam semangat meningkatkan yang asli, dan saya suka ide itu. Saya tidak suka warna sewenang-wenang / pelangi baik dalam yang asli atau milik Anda sekalipun. Coba set warna berurutan. Bar terbalik juga tidak cocok untuk saya.
xan
Saya pikir warna berurutan bisa menjadi perbaikan - terima kasih atas sarannya. Di sisi lain, saya tidak berpikir warna itu penting karena kita memiliki pembatas mingguan untuk memandu kita (Senin adalah hari pertama, Selasa yang kedua, dll). Kami sepakat tentang plot back-to-back, karena saya juga mengisyaratkan jawaban saya. Peningkatan pada plot itu, mungkin untuk skala kedua sumbu vertikal sesuai dengan sarana harian masing-masing. Ini akan membuat perbandingan antara minggu dan membaca Halaman / menghabiskan waktu lebih mudah.
Berenang
Sekarang menyebutkan warna menjadi tidak penting, terpikir oleh saya bahwa menghilangkan variasi warna bisa bekerja. Hari-hari dalam seminggu sudah dibedakan berdasarkan lokasi. Atau mungkin hanya membuat hari Rabu warna yang berbeda sebagai jangkar tambahan.
xan
Sangat bagus! Saya belum melalui jawaban yang lain, tetapi ini sudah merupakan peningkatan yang luar biasa! Terima kasih banyak
1
Saya telah mengedit jawaban untuk memasukkan ide-ide dari komentar. @ Berkomitmen pada tantangan, saya senang Anda merasa terbantu.
Berenang
1

Perubahan x poros ke hari kerja, biarkan y sama dan:

  1. plot data sebagai garis dengan dua minggu sebagai variabel pengelompokan - jadi untuk mendapatkan dua baris terpisah untuk setiap minggu,
  2. atau gunakan plot bar yang dikelompokkan di mana untuk setiap hari kerja Anda memiliki dua bar untuk minggu 1 dan minggu 2, masing-masing dengan jumlah halaman / jam per hari.
Tim
sumber
Silakan lihat apa yang 1. dilakukan di atas, dan 2. sayangnya tidak muncul sangat berarti. Terima kasih atas jawaban Anda.
Saya melihat tidak ada masalah dengan itu ... Ini tidak terlihat bagus tetapi ini masalah perangkat lunak yang Anda gunakan dan / atau pengeditan grafis.
Tim
1. Anda tidak dapat benar-benar mengetahui apakah Minggu 1 atau 2 berjalan lebih baik, dan jika ditambahkan beberapa minggu, itu akan menjadi terlalu kacau. 2. Sebenarnya saya tidak keberatan yang ini, sebenarnya cukup bagus. Mungkin saya bisa memasang yang asli dan yang satu ini untuk membuatnya lebih jelas. (Juga ditunjukkan di atas sekarang)
1

Plot di bawah ini menunjukkan Jam Studi dan Total Halaman kumulatif dalam setiap minggu menggunakan garis alih-alih bilah bertumpuk, yang diharapkan akan memudahkan untuk melihat tren dalam setiap minggu dan membandingkan antara minggu. Saya telah mengisi minggu-minggu yang hilang dengan nol, tetapi Anda dapat mengecualikannya jika Anda mau. The Rkode untuk pengolahan data dan plot generasi yang diposting di bawah grafik.

masukkan deskripsi gambar di sini

Dalam melakukan langkah-langkah di bawah ini, saya pertama-tama memuat data yang diposting dalam pertanyaan ke dalam kerangka data yang disebut 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)
Eipi10
sumber
Ini adalah ide yang sangat bagus dan pasti memecahkan masalah karena sulit untuk menentukan hari apa yang Anda lihat. Terima kasih
0

Pilihan lain adalah bagan gelembung, di mana Anda dapat memiliki ketinggian vertikal untuk satu variabel dan ukuran titik untuk yang lainnya. Di bawah, tanggal (hari) adalah horisontal, Jam belajar adalah vertikal, Halaman yang dicakup per hari adalah ukuran gelembung, dan minggu diwarnai.

masukkan deskripsi gambar di sini

Avraham
sumber
0

Anda bisa menggambar di 3d. Saya tidak memverifikasi bahwa hari dalam seminggu dihitung dengan benar, menemukan sudut pandang terbaik, dll, tetapi ini akan memberi Anda ide. Hiasan lebih lanjut juga dimungkinkan. Sebagai contoh, mungkin lebih baik untuk menghubungkan titik-titik dengan garis dan memindahkan garis kisi sesuai dengan setiap hari Senin.

Sebenarnya apa yang akan sangat menarik untuk dicoba adalah memiliki masing-masing kisi-kisi kiri-kanan dan atas-bawah (seperti yang ditunjukkan dalam sudut ini) sesuai dengan hari yang sama dalam seminggu (mis. Senin), kemudian menempatkan plot-plot kotak di dinding bawah dan kanan belakang di dalam garis kisi. Plot kotak akan sesuai dengan total jam dan total halaman untuk setiap minggu, masing-masing. Saya hampir yakin itu mungkin dilakukan dengan rgl, tetapi akan membutuhkan beberapa bermain-main. Mungkin layak. Petak biola atau petak kacang mungkin lebih baik.

masukkan deskripsi gambar di sini

Data (untuk memasukkan ke 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))

Buat plot:

#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)
Marah
sumber
-1

Mengikuti peta panas dengan nomor minggu (tahun), hari dalam seminggu dan segi jam dan halaman mungkin membantu:

masukkan deskripsi gambar di sini

Menghapus 2 nilai tinggi memberikan gradien warna yang lebih baik di plot:

masukkan deskripsi gambar di sini

Mengikuti barchart juga dapat membantu.

masukkan deskripsi gambar di sini

Itu jelas menunjukkan periode 2 minggu ketika tidak ada pekerjaan yang dilakukan.

Plot dengan garis mungkin juga berguna (garis tidak berantakan; titik-titiknya juga bisa dihilangkan, hanya menyimpan dua garis)

masukkan deskripsi gambar di sini

Mereka dengan jelas menyampaikan informasi sambil menyederhanakan plot untuk memudahkan pemahaman.

juga
sumber