Hiển thị ba mẩu thông tin trên biểu đồ


15

Lưu ý: 50 điểm dữ liệu thô được đính kèm ngay bây giờ.

Tôi muốn hiển thị bao nhiêu nghiên cứu tôi đã thực hiện và bao nhiêu trang tôi đã hoàn thành trong suốt cả tuần, chia tay theo ngày và tôi đã thực hiện như hình dưới đây:nhập mô tả hình ảnh ở đây

Tôi đã có người nói với tôi rằng họ không thể hiểu biểu đồ, nhưng tôi không biết làm thế nào khác tôi có thể hiển thị chúng. Vì về cơ bản tôi sẽ cần ba chiều mà không cần mô tả tích lũy. Tôi muốn tránh sử dụng nhiều biểu đồ đường, vì sau một vài tuần, biểu đồ sẽ trở nên không thể đọc được. Tôi không thể làm gì?

Làm thế nào tôi có thể hiển thị những cái này rõ ràng hơn?

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

Nếu bạn có thể đăng dữ liệu mẫu, những người quan tâm có thể chơi và hiển thị cho bạn các giải pháp của họ. Để thực tế, nó sẽ cần vài tuần, vì bản chất của vấn đề là những gì xảy ra khi số tuần tăng lên.
Nick Cox

@NickCox Tôi có thể đăng lại trong một vài tuần kể từ khi tôi thực sự không chắc chắn dữ liệu sẽ thay đổi như thế nào và tôi chỉ sống được 13 ngày đầu tiên cho đến nay (3 trong số đó không có nghiên cứu)

@NickCox Làm cách nào để đăng dữ liệu thô?

1
Lời khuyên của tôi là chờ một chút. Bằng cách cập nhật câu hỏi, bạn đã thu hút sự chú ý đến nó. Xem nếu bạn nhận được câu trả lời mới.
Nick Cox

1
Bạn muốn hiển thị gì về những dữ liệu này? Câu chuyện nào bạn muốn kể? Bạn đang cố gắng làm gì để mọi người hiểu về dữ liệu của bạn với biểu đồ thanh?
gung - Phục hồi Monica

Câu trả lời:


7

Một cách trực quan hóa dữ liệu dựa trên ngày / lịch là thông qua màn hình ma trận mã hóa dữ liệu bằng màu. Ma trận (hoặc bảng) được sắp xếp sao cho các hàng biểu thị tuần và cột biểu thị ngày. Bạn có thể thêm một cột cuối cùng cho tổng số hàng tuần nếu đó là mong muốn.

Điều này có thể được thực hiện một cách đơn giản trong Excel với định dạng có điều kiện nếu dữ liệu được sắp xếp chính xác. Cụ thể, bạn có thể xây dựng một "lưới" các giá trị với các công thức tra cứu dữ liệu gốc của bạn. Từ đó, bạn có thể sử dụng định dạng có điều kiện để hiển thị kết quả.

Đây là kết quả có thể trông như thế nào. Xin lỗi tôi đã thay đổi định dạng ngày. Công thức trong ô H1 là : "=IFERROR(VLOOKUP($G$1+$G6*7+H$5, $B$5:$C$16,2,FALSE), 0)". Đó là làm một số phép toán để có được những ngày theo đúng thứ tự. Hy vọng nó đơn giản.

Hình ảnh định dạng có điều kiện với sắp xếp ma trận

Nếu bạn thực sự muốn đẩy phong bì, bạn có thể sử dụng một khung như d3 và plugin lịch của nó để hiển thị dữ liệu này. Đó có thể là một công việc nhiều hơn mặc dù nó có giá trị.

Định dạng này rất giống với cách GitHub hiển thị hoạt động / đóng góp của người dùng theo thời gian. Đây là một người dùng (không phải tôi!). nhập mô tả hình ảnh ở đây


2
(+1) Tôi thích cách tiếp cận này, đặc biệt vì nó phù hợp để sử dụng trong cùng bảng tính mà dữ liệu đang được nhập. Màn hình đồ họa này có hiệu quả là một bản đồ nhiệt . Bản thân tôi thường xuyên sử dụng các thiết lập tương tự và tôi thấy một điểm yếu là các khía cạnh của xu hướng có thể khó chọn ra, vì vậy có thể tốt khi bổ sung điều này với một số biến thể của biểu đồ đường để hiển thị chi tiết hơn (Peter Flom, Nick Cox và tôi đã đưa ra tất cả các đề xuất tốt).
Cá bạc

6

Các tính năng nổi bật của bản gốc là số tiền hàng tuần. Các giá trị riêng lẻ chỉ có ý nghĩa sau khi bạn học được màu sắc và tôi tưởng tượng đó là lý do lớn khiến cốt truyện không hiệu quả với người xem mới. Liên quan đến đó, khía cạnh thời gian của ngày bị mất. Một bộ màu liên tiếp có thể giúp ích (ví dụ: 7 màu xanh lam).

Tôi thường không quan tâm đến việc dán nhãn cho mỗi mục - các giá trị chính xác có quan trọng không? Biểu đồ không thực hiện công việc của nó nếu bạn không thể giải thích nó mà không có mọi giá trị được dán nhãn.

Cố gắng lên . Do tầm quan trọng rõ ràng của các khoản tiền hàng tuần, tôi đã vẽ các khoản tiền tích lũy hàng tuần. Nó cho thấy các khoản tiền hàng tuần và các ngày theo thứ tự thời gian. Giá trị ngày chính xác ít rõ ràng hơn, nhưng giá trị ngoại lệ sẽ vẫn nổi bật.

Đối với các loại ô nhỏ này (có thể giảm xuống kích thước tia lửa ), thật hữu ích khi có một đường tham chiếu hoặc khu vực. Để minh họa, tôi đã thêm một phạm vi mục tiêu. Nếu mục tiêu không phù hợp, thì tham chiếu có thể là một cái gì đó giống như phạm vi trong ba tuần qua hoặc một số giá trị tham chiếu cố định.

nhập mô tả hình ảnh ở đây

Tôi đã sử dụng màu đỏ để chỉ ra tuần nào nằm dưới mục tiêu để quét nhanh.

Với nhiều tuần nữa, bạn có thể sắp xếp chúng thành một lưới chứ không phải là một danh sách dọc.

nhập mô tả hình ảnh ở đây


Tôi nghĩ rằng điều này là tuyệt vời. Có cách nào hiệu quả để kết hợp giữa giờ học và trang thông tin được bảo hiểm, mà (ít nhất là tôi có ấn tượng) dường như là một trong những mục tiêu chính của bài tập? Tôi nghi ngờ nó sẽ khá hiệu quả trong đồ họa đầu tiên có "giờ học" và "trang hoàn thành" quay lại (tức là giờ học được vẽ trong cột bên trái của tuần và các trang hoàn thành trong cột bên phải của tuần ). Nhưng tôi không chắc những gì sẽ hoạt động tốt trong đồ họa thứ hai.
Cá bạc

Rõ ràng một giải pháp sẽ là overplot cả hai loạt với trục dọc thứ cấp cho các trang được nghiên cứu, nhưng rất nhiều người có ý kiến ​​mạnh mẽ chống lại điều này, ví dụ Hadley Wickham cố tình từ chối thực hiện nó trong ggplot. Tôi thường sẽ tránh làm điều này, nhưng sẽ có ý nghĩa nếu có mục tiêu cho cả hai - điều này sẽ giới thiệu thang đo tự nhiên cho trục y thứ cấp, để đảm bảo các khu vực mục tiêu trong hàng giờ và trang được sắp xếp gọn gàng. Quyết định mở rộng đó nói chung là vấn đề gây tranh cãi với nhiều trục y.
Cá bạc

Cảm ơn @Silverfish! Tôi cũng không thích hai tỷ lệ trong một biểu đồ, nhưng như bạn nói nếu cả hai có thể được đặt trên cùng một tỷ lệ so với các mục tiêu tương ứng của chúng, thì nó có thể hoạt động. Tôi nên nói rõ ràng trong câu trả lời của mình rằng bằng cách chỉ hiển thị một biện pháp, tôi cho rằng biện pháp khác sẽ được hiển thị theo cùng một cách nhưng trong các biểu đồ riêng biệt. Ở dạng danh sách dọc, mỗi thước đo có thể là một cột biểu đồ riêng.
xan

Đây là một câu trả lời tuyệt vời khác. Tôi chắc chắn thích ý tưởng mục tiêu bạn đã áp dụng. Tôi sẽ phải xem những gì tôi làm bây giờ mà tôi đã xem tất cả các câu trả lời. Cảm ơn bạn

5

Nếu tôi hiểu bạn một cách chính xác, lý do bạn không muốn sử dụng biểu đồ đường là bạn có quá nhiều tuần và các biểu đồ sẽ trở nên lộn xộn.

Nếu đây là vấn đề thì bạn có thể chia chuỗi thời gian thành các thành phần:

Biến thể hàng ngày

Biến thể hàng tuần

Xu hướng dài hạn

Còn gì nữa không.

William S. Cleveland cho thấy một ví dụ hay về điều này trong một trong những cuốn sách của anh ấy (Tôi không ở văn phòng của tôi và không thể nhớ cuốn sách nào của anh ấy có ví dụ nhưng đó là Trực quan hóa dữ liệu hoặc Các yếu tố của dữ liệu đồ thị ).

Cả R và SAS đều có công cụ để làm việc này. Bạn có quyền truy cập vào một trong số họ?


Tôi có R trên máy tính của mình, nhưng tôi hiếm khi sử dụng nó. (Hoàn toàn sẵn sàng để tìm hiểu)

Chà, nó có một đường cong học tập nhưng nhìn vào hàm decompose (). Bạn có thể phải làm một số chơi để có được những gì bạn muốn. Ngoài ra, nếu bạn có thể tìm thấy những cuốn sách của Cleveland, chúng rất nổi bật.
Peter Flom - Khôi phục Monica

3
Đây là ví dụ của Peter mà Peter đã đề cập, từ các tài liệu R. Tôi nếu bạn đã cài đặt R, bạn có thể chạy ví dụ: stat.ethz.ch/R-manual/R-devel/l Library / stats / html / stl.html
Kieran

@Kieran Đầu ra đúng? imgur.com/IzRC0h8

5

Trước tiên tôi sẽ đánh vần một số phản đối đối với biểu đồ thanh xếp chồng hoặc chia ban đầu của bạn.

a. Mã màu xuất hiện hoàn toàn tùy ý. Do đó đồ thị không thể được nghiên cứu mà không lặp đi lặp lại giữa truyền thuyết và đồ thị.

b. Zeros là ẩn, như các đoạn thanh vô hình. Số không là một phần của biến thể.

Đối với những người và lý do khác, các biểu đồ rất khó để giải mã.

Điều đó nói rằng, biểu đồ có giá trị nếu sự quan tâm chủ yếu là nghiên cứu sự thay đổi trong tổng số từ tuần này sang tuần khác. Nhiều tuần có thể được vẽ như nhiều thanh. Nhược điểm tương ứng là nó sẽ ngày càng khó hơn để nghiên cứu các biến thể trong vòng vài tuần.

Sao lưu: Có ba biến ở đây trong mỗi vấn đề.

  1. Thời gian nghiên cứu hoặc trang hoàn thành.

  2. Ngày trong tuần.

  3. Số tuần.

Khi số tuần tăng lên, bất kỳ biểu đồ nào cũng sẽ chi tiết hơn. Thách thức là giữ cho chi tiết đó được kiểm soát.

Tôi sẽ xem xét một âm mưu chu kỳ (các tên khác đã được sử dụng trong tài liệu, nhưng hầu hết đề cập đến việc sử dụng nó để xem xét sự thay đổi theo mùa). Có một lời giới thiệu sáng suốt ở đây bởi Naomi Robbins Các ví dụ của cô ấy bao gồm những người như của bạn, nơi sự quan tâm là trong các biến thể trong và giữa các tuần.


Cảm ơn bạn cho liên kết rất tốt đẹp. Một nhận xét về sự phản đối của bạn, những ngày thực sự được xếp chồng lên nhau (từ dưới lên trên) Thứ Sáu-> Thứ Năm, nhưng một số ngày bị thiếu chắc chắn là một mối quan tâm hợp lệ liên quan đến khả năng đọc.

Thật vậy, nhưng mọi người vẫn cần sử dụng truyền thuyết để giải mã.
Nick Cox

R có monthplot lệnh mà thực sự có thể được sử dụng trên dữ liệu hàng tuần - xem stackoverflow.com/questions/5826703/...
cá bạc

5

Các biểu đồ đường có thể sẽ dễ giải thích hơn nếu bạn lấy trung bình di chuyển bảy ngày, mười bốn ngày hoặc có thể là 28 ngày. Điều đó sẽ làm mịn chúng ra và vẫn cho phép bạn phát hiện xu hướng.

Điều này có một số điểm tương đồng với giải pháp của Peter Flom, mặc dù khá đơn giản và do đó không nói lên một bức tranh đầy đủ - nhưng nó có thể đủ cho nhu cầu của bạn. Nếu bạn đang ghi dữ liệu của mình vào bảng tính, có một lợi thế là việc lấy trung bình như vậy có thể dễ dàng được thực hiện trong chính bảng tính bằng cách thiết lập một số công thức và biểu đồ sẽ tự động cập nhật khi bạn điền dữ liệu mới.

Cập nhật để bao gồm các biểu đồ

Biểu đồ đường cho đường trung bình di chuyển

Biểu đồ bảng tính cho trung bình cán trong bảy ngày là không đặc biệt nhưng dường như làm tốt công việc của nó - biến đổi hàng ngày được làm mịn để xu hướng dễ dàng phát hiện hơn (so với biểu đồ hàng ngày tương đương ồn ào đến mức không thể hiểu được). Một số tính năng chính được chọn ra bởi cốt truyện này: ví dụ, một số lượng lớn công việc đã được thực hiện vào giữa tháng 1, tính theo giờ, nhưng điều này không đi kèm với sự gia tăng tương xứng trong các trang trung bình hoàn thành mỗi ngày. Kỳ nghỉ Giáng sinh là rất rõ ràng và miễn là các điểm dữ liệu riêng lẻ được vẽ rõ ràng thì nó không quá sai lệch (nếu chỉ có thể nhìn thấy dòng, thì không thể xác định rằng thời gian phẳng là do thiếu dữ liệu!). Tuy nhiên, tôi thực sự khuyên bạn nên bao gồm1,5

Chỉ với năm mươi mục dữ liệu, có vẻ như không đáng để thử tính trung bình trong một khoảng thời gian dài hơn để phát hiện các xu hướng chạy dài hơn. Tương tự, tôi nghi ngờ rằng ý tưởng tuyệt vời về phân rã theo mùa của Peter Flom sẽ phải vật lộn với dữ liệu hạn chế như vậy. Nếu bạn thực hiện phân tách trong bảng tính của mình, điều quan trọng hơn nữa là bao gồm cả phần ngắt dưới dạng dữ liệu bằng không.

Để tạo lại công thức của tôi, hãy dán công thức này sao cho 'Ngày' nằm trong ô 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

Theo tôi hiểu câu hỏi của bạn, sẽ hiển thị giờ và trang riêng biệt. Tôi sẽ làm điều đó trước. Sau đó, tôi sẽ hiển thị Tổng và Trang trong một ô. Tôi đoán rằng những con số thực tế không phải là điều quan trọng nhất - điều quan trọng hơn là có được cái nhìn tổng quan về các tuần và các ngày trong tuần, có hiệu quả và không. Trong trường hợp đó, tôi khuyên bạn nên giữ cấu trúc thời gian tự nhiên vì thực tế chỉ có một chiều thời gian trong dữ liệu của bạn. Chúng ta vẫn có thể tìm cách phân định các tuần.

Tôi đã sử dụng mã R sau đây và gói ggplot2 để tạo ra âm mưu đầu tiên này. Dữ liệu của bạn đã được tải vào dữ liệu đối tượng theo đoạn mã dưới đây. Cốt truyện là một âm mưu thanh được nhóm lại, với các thanh màu xám biểu thị tổng số trang hàng tuần.

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

Chiều cao của thanh màu xám cho biết tổng số tuần của trang.

Điều này rõ ràng là không hoàn hảo. Các thanh màu xám chiếm ưu thế nhiều so với thanh ngày có diện tích lớn hơn cho cùng số lượng đọc. Chúng ta có thể làm cho chúng mỏng hơn, nhưng tôi thích cách chúng phân định các tuần. Chúng biểu thị khá độc đáo những ngày nào trong cùng một tuần - điều gì đó không nhất thiết phải dễ hiểu bằng cách khác. Đặc biệt bởi vì chúng tôi có số lượng không.

Trong cốt truyện tiếp theo, tôi đã sử dụng số trang trung bình (trong tuần) làm chiều cao của thanh màu xám.

Chiều cao của thanh màu xám cho biết trung bình tuần của các trang.

Điều này có lẽ đại diện cho dữ liệu tốt hơn. Tuy nhiên, lưu ý rằng tuần 0 và 7 là sai lệch vì chúng không bao gồm 7 ngày. Bạn có thể dễ dàng làm việc xung quanh này.

Nếu bạn khăng khăng hiển thị các trang và thời gian đồng thời, bạn có thể thực hiện một âm mưu thanh back-to-back. Nó có thể hơi khó hiểu vì hai quy mô dọc không giống nhau. Mặt khác, thật tuyệt khi so sánh thời gian sử dụng và công việc được thực hiện trực tiếp như thế này.

Kết hợp thời gian và các trang trong một cốt truyện back-to-back.

EDIT: Nhận ra rằng màu sắc thực sự không cần thiết lắm và được lấy cảm hứng từ xan (xem bình luận bên dưới), bạn có thể đơn giản hóa cốt truyện thành một cái gì đó như thế này. Tôi đã đánh dấu Thứ Năm để đưa ra một hướng dẫn trực quan bổ sung. Bạn cũng có thể tranh luận về việc sử dụng cùng một màu cho tất cả các thanh để không quá nhấn mạnh một số ngày (tùy ý).

Một phiên bản đơn giản hơn.

Trên một lưu ý cuối cùng, bạn cũng có thể thử chia tỷ lệ các trục khác nhau bằng cách chia giá trị của bạn cho giá trị trung bình. Điều này sẽ làm cho 1 giá trị "bình thường". Chúng ta có thể bao gồm một dòng ở 1 để nhấn mạnh điểm này - hiện đã được thực hiện trên cốt truyện back-to-back. Điều này tách biệt "tốt" với ngày "xấu" về khối lượng công việc trung bình.

nhập mô tả hình ảnh ở đây

Trên sơ đồ này, chúng tôi cũng có thể đảm bảo rằng một đơn vị tương ứng với cùng khoảng cách trên cả hai trục vì chúng có thể so sánh được với nhau.

Cũng lưu ý rằng tôi đã làm hỏng những ngày trong phiên bản đầu tiên. Tôi đã sửa mã và lô và tôi sẽ thực hành bảy ngày trong tuần.

Mã đã tạo ra âm mưu cuối cùng:

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

Điều này có vẻ như trên tinh thần cải thiện bản gốc, và tôi thích ý tưởng này. Tôi không thích màu sắc tùy ý / cầu vồng trong cả bản gốc hoặc màu của bạn. Hãy thử một bộ màu liên tiếp. Thanh lộn ngược cũng không làm việc cho tôi.
xan

Tôi nghĩ rằng các màu liên tiếp có thể là một sự cải tiến - cảm ơn bạn đã gợi ý. Mặt khác, tôi không nghĩ rằng màu sắc rất quan trọng vì chúng ta có các dấu phân cách hàng tuần để hướng dẫn chúng ta (Thứ Hai ngày đầu tiên, Thứ Ba ngày thứ hai, v.v.). Chúng tôi đồng ý về cốt truyện back-to-back, vì tôi cũng gợi ý trong câu trả lời của mình. Một cải tiến trên cốt truyện đó, có thể là mở rộng cả hai trục dọc theo phương tiện hàng ngày tương ứng của chúng. Điều này sẽ giúp so sánh giữa các tuần và Trang đọc / Thời gian chi tiêu dễ dàng hơn.
swmo 5/2/2015

Bây giờ khi đề cập đến các màu sắc không quan trọng, tôi nhận thấy rằng việc loại bỏ biến thể màu có thể hoạt động. Các ngày trong tuần đã được phân biệt theo vị trí. Hoặc có thể chỉ làm cho thứ tư trở thành một sắc thái khác như một mỏ neo bổ sung.
xan

Rất đẹp! Tôi chưa đi qua các câu trả lời khác, nhưng đây chắc chắn là một cải tiến tuyệt vời rồi! Cảm ơn bạn rất nhiều

1
Tôi đã chỉnh sửa câu trả lời để bao gồm các ý tưởng từ các ý kiến. @ Tham gia một thử thách, tôi rất vui vì bạn thấy nó hữu ích.
swmo 6/2/2015

1

Thay đổi x trục đến các ngày trong tuần, hãy y giống nhau và:

  1. vẽ dữ liệu dưới dạng các dòng có hai tuần dưới dạng các biến nhóm - vì vậy để có hai dòng riêng biệt cho mỗi tuần,
  2. hoặc sử dụng các ô thanh được nhóm lại trong đó mỗi ngày trong tuần bạn có hai thanh cho tuần 1 và tuần 2, mỗi thanh có số trang / giờ mỗi ngày.

Vui lòng xem những gì 1. làm ở trên và 2. không có vẻ rất có ý nghĩa. Cảm ơn về câu trả lời của bạn.

Tôi thấy không có vấn đề gì với nó ... Nó trông không đẹp nhưng đó là vấn đề về phần mềm bạn sử dụng và / hoặc chỉnh sửa đồ họa.
Tim

1. Bạn thực sự không thể biết nếu Tuần 1 hoặc 2 sẽ tốt hơn, và nếu thêm một vài tuần nữa, nó sẽ trở nên quá hỗn loạn. 2. Tôi thực sự không bận tâm điều này, nó thực sự khá hay. Có lẽ tôi có thể kết hợp bản gốc và bản này lại với nhau để làm cho nó rõ ràng hơn. (Cũng được hiển thị ở trên bây giờ)

1

Biểu đồ bên dưới hiển thị số giờ học tích lũy và tổng số trang trong mỗi tuần bằng cách sử dụng các dòng thay vì các thanh xếp chồng lên nhau, hy vọng sẽ giúp bạn dễ dàng nhìn thấy xu hướng trong mỗi tuần và so sánh giữa các tuần. Tôi đã điền vào các tuần bị thiếu với số không, nhưng bạn có thể loại trừ những số đó nếu bạn muốn. Các Rmã cho xử lý dữ liệu và âm mưu thế hệ được đăng tải dưới đây đồ thị.

nhập mô tả hình ảnh ở đây

Khi thực hiện các bước dưới đây, trước tiên tôi đã tải dữ liệu được đăng trong câu hỏi vào khung dữ liệu được gọi 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)

Đây là một ý tưởng thực sự tốt và chắc chắn giải quyết vấn đề khó có thể xác định ngày bạn đang xem xét. Cảm ơn bạn

0

Một tùy chọn khác là biểu đồ bong bóng, nơi bạn có thể có chiều cao dọc cho một biến và kích thước chấm cho biến khác. Bên dưới, ngày (ngày) là chiều ngang, Giờ nghiên cứu là chiều dọc, Trang được bao phủ mỗi ngày là kích thước bong bóng và tuần được tô màu.

nhập mô tả hình ảnh ở đây


0

Bạn có thể vẽ trong 3d. Tôi đã không xác minh rằng ngày trong tuần đã được tính toán chính xác, tìm góc nhìn tốt nhất, v.v., nhưng điều này sẽ cho bạn ý tưởng. Tôn tạo thêm cũng có thể. Ví dụ, có thể tốt hơn để kết nối các điểm với một đường và di chuyển các đường lưới để tương ứng với mỗi thứ Hai.

Trên thực tế, điều rất thú vị để thử là có mỗi đường lưới bên trái và lên xuống (như được hiển thị ở góc này) tương ứng với cùng một ngày trong tuần (ví dụ: thứ hai), sau đó đặt các ô vuông ở dưới cùng và trở lại các bức tường bên phải các đường lưới. Các ô vuông sẽ tương ứng với tổng số giờ và tổng số trang cho mỗi tuần, tương ứng. Tôi gần như chắc chắn có thể làm được với rgl, nhưng sẽ cần một số tiếng leng keng. Nó có thể là giá trị nó. Lô violon hoặc đậu có thể thậm chí còn tốt hơn.

nhập mô tả hình ảnh ở đây

Dữ liệu (để nhập vào 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))

Tạo cốt truyện:

#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

Theo sơ đồ nhiệt với số tuần (của năm), ngày trong tuần và các khía cạnh cho giờ và trang có thể hữu ích:

nhập mô tả hình ảnh ở đây

Xóa 2 giá trị cao sẽ cho độ dốc màu tốt hơn trên lô:

nhập mô tả hình ảnh ở đây

Theo sau barchart cũng có thể hữu ích.

nhập mô tả hình ảnh ở đây

Nó rõ ràng cho thấy một khoảng thời gian 2 tuần khi không có công việc được thực hiện.

Cốt truyện với các dòng cũng có thể hữu ích (các dòng không bị lộn xộn; các điểm cũng có thể được loại bỏ, chỉ giữ lại hai dòng)

nhập mô tả hình ảnh ở đây

Họ truyền tải rõ ràng thông tin trong khi đơn giản hóa cốt truyện để dễ hiểu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.