การแสดงข้อมูลสามชิ้นบนกราฟ


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

หากคุณสามารถโพสต์ข้อมูลตัวอย่างผู้ที่สนใจสามารถเล่นและแสดงวิธีแก้ปัญหาของพวกเขา จะเป็นจริงต้องใช้เวลาหลายสัปดาห์เนื่องจากเนื้อหาของปัญหาคือสิ่งที่เกิดขึ้นเมื่อจำนวนสัปดาห์เพิ่มขึ้น
Nick Cox

@ NickCox ฉันสามารถ repost ในอีกไม่กี่สัปดาห์เนื่องจากฉันไม่แน่ใจว่าข้อมูลจะเปลี่ยนแปลงอย่างไรและฉันมีชีวิตอยู่ตลอด 13 วันแรกของมันจนถึงตอนนี้ (3 ซึ่งไม่มีการศึกษา)

@NickCox ฉันจะโพสต์ข้อมูลดิบได้อย่างไร

1
คำแนะนำของฉันรอสักครู่ โดยอัปเดตคำถามที่คุณให้ความสนใจ ดูว่าคุณได้รับคำตอบใหม่หรือไม่
Nick Cox

1
คุณต้องการแสดงข้อมูลเกี่ยวกับข้อมูลเหล่านี้คืออะไร คุณต้องการเล่าเรื่องอะไร คุณกำลังพยายามทำให้คนเข้าใจเกี่ยวกับข้อมูลของคุณด้วยกราฟแท่ง?
gung - Reinstate Monica

คำตอบ:


7

วิธีหนึ่งในการแสดงข้อมูลเป็นวันที่ / ตามปฏิทินคือการแสดงผลเมทริกซ์ที่เข้ารหัสข้อมูลด้วยสี เมทริกซ์ (หรือตาราง) จัดเรียงเพื่อให้แถวแสดงถึงสัปดาห์และคอลัมน์แทนวัน คุณสามารถเพิ่มคอลัมน์สุดท้ายสำหรับยอดรวมรายสัปดาห์หากต้องการ

สิ่งนี้สามารถนำมาใช้ค่อนข้างง่ายใน Excel ด้วยการจัดรูปแบบตามเงื่อนไขหากข้อมูลถูกจัดเรียงอย่างถูกต้อง โดยเฉพาะอย่างยิ่งคุณสามารถสร้าง "กริด" ของค่าด้วยสูตรที่ค้นหาข้อมูลต้นฉบับของคุณ จากตรงนั้นคุณสามารถใช้การจัดรูปแบบตามเงื่อนไขเพื่อแสดงผลลัพธ์

นี่คือลักษณะของผลลัพธ์ที่ได้ ขออภัยฉันเปลี่ยนรูปแบบวันที่ สูตรในเซลล์ H1 "=IFERROR(VLOOKUP($G$1+$G6*7+H$5, $B$5:$C$16,2,FALSE), 0)"คือ: กำลังทำคณิตศาสตร์เพื่อให้ได้วันในลำดับที่ถูกต้อง หวังว่ามันจะตรงไปตรงมา

ภาพของการจัดรูปแบบตามเงื่อนไขพร้อมการจัดเมทริกซ์

หากคุณต้องการผลักซองจดหมายจริงๆคุณสามารถใช้เฟรมเวิร์กเช่นd3 และปฏิทินปลั๊กอินเพื่อแสดงข้อมูลนี้ นั่นอาจเป็นภาระมากกว่าที่คิด

รูปแบบนี้คล้ายกับวิธีที่ GitHub แสดงกิจกรรมผู้ใช้ / การสนับสนุนเมื่อเวลาผ่านไป นี่คือผู้ใช้คนหนึ่ง(ไม่ใช่ฉัน!) ป้อนคำอธิบายรูปภาพที่นี่


2
(+1) ฉันชอบวิธีการนี้โดยเฉพาะอย่างยิ่งเนื่องจากเหมาะสำหรับการใช้งานในสเปรดชีตเดียวกันกับที่กำลังป้อนข้อมูล การแสดงผลกราฟิกนี้เป็นอย่างมีประสิทธิภาพแผนที่ความร้อน ฉันใช้ set-ups ที่คล้ายกันเป็นประจำและฉันพบจุดอ่อนหนึ่งคือแนวโน้มของการเลือกออกได้ยากดังนั้นจึงเป็นการดีที่จะเสริมสิ่งนี้กับกราฟเส้นบางอย่างเพื่อแสดงรายละเอียดปลีกย่อย (Peter Flom, Nick Cox และฉันได้ให้คำแนะนำที่ดีทั้งหมด)
Silverfish

6

คุณสมบัติที่โดดเด่นของต้นฉบับคือผลรวมรายสัปดาห์ ค่าของแต่ละคนมีความหมายเฉพาะหลังจากที่คุณได้เรียนรู้สีและฉันคิดว่านั่นเป็นเหตุผลใหญ่ที่พล็อตไม่ทำงานสำหรับผู้ชมใหม่ เกี่ยวข้องกับสิ่งนั้นระยะเวลาของวันจะหายไป ลำดับชุดของสีอาจช่วย (เช่น 7 เฉดสีฟ้า)

ปกติฉันไม่สนใจติดป้ายกำกับทุกรายการ - ค่าที่แน่นอนที่สำคัญหรือไม่ กราฟไม่สามารถทำงานได้หากคุณไม่สามารถตีความได้หากไม่มีค่าทุกค่า

ที่จะลองของฉันในวันที่จะลองของฉันด้วยความสำคัญที่ชัดเจนของผลรวมรายสัปดาห์ฉันได้วางแผนผลรวมสะสมรายสัปดาห์ มันแสดงจำนวนเงินรายสัปดาห์และวันในเวลา ค่าวันที่แน่นอนชัดเจนน้อยกว่า แต่ค่าที่เกินจะยังคงโดดเด่น

สำหรับพล็อตเส้นเล็ก ๆ เหล่านี้ (ซึ่งสามารถลดขนาดให้เล็กลงเป็นประกายได้ ) การมีบรรทัดอ้างอิงหรือพื้นที่อ้างอิงเป็นประโยชน์ สำหรับภาพประกอบฉันได้เพิ่มช่วงเป้าหมาย หากเป้าหมายไม่เหมาะสมการอ้างอิงอาจเป็นช่วงเช่นช่วงสามสัปดาห์ที่ผ่านมาหรือค่าอ้างอิงคงที่

ป้อนคำอธิบายรูปภาพที่นี่

ฉันใช้สีแดงเพื่อระบุว่าสัปดาห์ใดที่ต่ำกว่าเป้าหมายสำหรับการสแกนอย่างรวดเร็ว

ด้วยอีกหลายสัปดาห์คุณอาจจัดระเบียบพวกเขาเป็นกริดแทนที่จะเป็นรายการแนวตั้ง

ป้อนคำอธิบายรูปภาพที่นี่


ฉันคิดว่ามันยอดเยี่ยม มีวิธีที่มีประสิทธิภาพในการรวมชั่วโมงการศึกษาและหน้าข้อมูลที่ครอบคลุมซึ่งอย่างน้อยฉันได้รับความประทับใจดูเหมือนว่าเป็นหนึ่งในวัตถุประสงค์หลักของแบบฝึกหัดหรือไม่ ฉันสงสัยว่ามันจะมีประสิทธิภาพพอสมควรในกราฟิกแรกที่มี "ชั่วโมงการศึกษา" และ "หน้าเสร็จ" กลับไปข้างหลัง (เช่นชั่วโมงการศึกษาที่พล็อตในคอลัมน์ด้านซ้ายของปีและหน้าเสร็จในคอลัมน์ด้านขวาของปี ) แต่ฉันไม่แน่ใจว่าสิ่งใดจะทำงานได้ดีในกราฟิกที่สอง
Silverfish

เห็นได้ชัดว่าวิธีแก้ปัญหาหนึ่งคือการ overplot ทั้งสองชุดที่มีแกนตั้งทุติยภูมิสำหรับหน้าการศึกษา แต่ผู้คนจำนวนมากมีความคิดเห็นที่แข็งแกร่งต่อเรื่องนี้เช่น Hadley Wickham จงใจปฏิเสธที่จะใช้มันใน ggplot โดยทั่วไปฉันจะหลีกเลี่ยงการทำเช่นนี้ แต่อาจสมเหตุสมผลถ้ามีเป้าหมายสำหรับทั้งคู่ - นี่จะแนะนำมาตราส่วนตามธรรมชาติสำหรับแกน y สำรองเพื่อให้แน่ใจว่าพื้นที่เป้าหมายเป็นเวลาหลายชั่วโมงและจัดเรียงหน้าอย่างเรียบร้อย การตัดสินใจปรับสเกลนั้นโดยทั่วไปเป็นปัญหาที่ขัดแย้งกับแกน y หลายแกน
Silverfish

ขอบคุณ @Silverfish! ฉันไม่ชอบสเกลสองตัวในกราฟเดียว แต่อย่างที่คุณบอกถ้าทั้งคู่สามารถวางในระดับเดียวกันเมื่อเทียบกับเป้าหมายที่เกี่ยวข้องมันอาจใช้งานได้ ฉันควรพูดอย่างชัดเจนในคำตอบของฉันว่าโดยการแสดงเพียงการวัดเดียวฉันคิดว่าการวัดอื่นจะแสดงในลักษณะเดียวกัน แต่ในกราฟแยกต่างหาก ในรูปแบบรายการแนวตั้งแต่ละการวัดอาจเป็นคอลัมน์แยกต่างหากของกราฟ
xan

นี่เป็นอีกคำตอบที่ยอดเยี่ยม ฉันชอบแนวคิดที่คุณกำหนดไว้แน่นอน ฉันจะต้องเห็นสิ่งที่ฉันทำตอนนี้ที่ฉันได้ดูคำตอบทั้งหมด ขอบคุณ

5

ถ้าฉันเข้าใจคุณอย่างถูกต้องเหตุผลที่คุณไม่ต้องการใช้กราฟเส้นก็คือคุณมีเวลาหลายสัปดาห์เกินไปและกราฟจะยุ่งเหยิง

หากนี่เป็นปัญหาคุณสามารถแบ่งอนุกรมเวลาเป็นส่วนประกอบได้

รูปแบบรายวัน

รูปแบบรายสัปดาห์

แนวโน้มระยะยาว

สิ่งอื่นใด

William S. Cleveland แสดงตัวอย่างที่ดีของสิ่งนี้ในหนังสือเล่มหนึ่งของเขา (ฉันไม่ได้อยู่ที่ออฟฟิศของฉันและจำไม่ได้ว่าหนังสือเล่มใดของเขามีตัวอย่าง แต่เป็นข้อมูลภาพหรือองค์ประกอบของกราฟข้อมูล )

ทั้ง R และ SAS มีเครื่องมือสำหรับทำสิ่งนี้ คุณมีสิทธิ์เข้าถึงแบบใดแบบหนึ่งหรือไม่


ฉันมี R ในคอมพิวเตอร์ของฉัน แต่ฉันไม่ค่อยได้ใช้มัน (เต็มใจที่จะเรียนรู้อย่างเต็มที่)

มันมีช่วงการเรียนรู้ แต่ดูในฟังก์ชั่นการย่อยสลาย () คุณอาจต้องเล่นเพื่อให้ได้สิ่งที่คุณต้องการ นอกจากนี้หากคุณสามารถหาหนังสือของคลีฟแลนด์พวกเขาจะโดดเด่น
Peter Flom - Reinstate Monica

3
นี่คือตัวอย่างที่ Cleveland พูดถึงจากเอกสาร R ฉันถ้าคุณติดตั้ง R คุณสามารถเรียกใช้ตัวอย่าง: stat.ethz.ch/R-manual/R-devel/library/stats/html/stl.html
Kieran

@ Kieran แก้ไขเอาต์พุตหรือไม่ imgur.com/IzRC0h8

5

ฉันจะสะกดคำคัดค้านบางส่วนให้กับกราฟแท่งแบบกองซ้อนหรือแบ่งของคุณ

รหัสสีปรากฏขึ้นโดยพลการอย่างสมบูรณ์ ดังนั้นจึงไม่สามารถศึกษากราฟโดยไม่ต้องกลับไปมาระหว่างคำอธิบายแผนภูมิและกราฟซ้ำ ๆ

ข ศูนย์มีความหมายโดยนัยเป็นส่วนของแถบที่มองไม่เห็น เลขศูนย์เป็นส่วนหนึ่งของการเปลี่ยนแปลง

ด้วยเหตุผลเหล่านั้นและเหตุผลอื่น ๆ กราฟจึงยากต่อการถอดรหัส

กล่าวได้ว่ากราฟมีประโยชน์หากความสนใจส่วนใหญ่อยู่ในการศึกษาความผันแปรของยอดรวมในแต่ละสัปดาห์ หลายสัปดาห์สามารถวางแผนได้หลายแท่ง ข้อเสียที่สอดคล้องกันคือมันจะยากขึ้นและยากที่จะศึกษารูปแบบภายในสัปดาห์

การสำรองข้อมูล: มีสามตัวแปรที่นี่ในแต่ละปัญหา

  1. เวลาศึกษาหรือหน้าเสร็จสมบูรณ์

  2. วันของสัปดาห์

  3. หมายเลขสัปดาห์

เมื่อจำนวนสัปดาห์เพิ่มขึ้นกราฟใด ๆ ก็จะมีรายละเอียดมากขึ้น ความท้าทายคือการรักษารายละเอียดนั้นไว้ภายใต้การควบคุม

ฉันจะพิจารณาพล็อตวัฏจักร (มีการใช้ชื่ออื่นในวรรณคดี แต่ส่วนใหญ่อ้างถึงการใช้เพื่อดูการเปลี่ยนแปลงตามฤดูกาล) มีการแนะนำที่ชัดเจนโดยนาโอมิร็อบบิ้นส์ตัวอย่างของเธอรวมถึงคนที่ชอบคุณซึ่งความสนใจนั้นเปลี่ยนแปลงไปภายในและระหว่างสัปดาห์


ขอบคุณสำหรับลิงค์ที่ดีมาก หนึ่งความคิดเห็นเกี่ยวกับการคัดค้านของคุณวันจะถูกซ้อนกันจาก (ล่างขึ้นบน) วันศุกร์ -> วันพฤหัสบดี แต่บางวันที่ขาดหายไปเป็นข้อกังวลที่ถูกต้องเกี่ยวกับความสามารถในการอ่าน

แน่นอน แต่คนยังคงต้องใช้ตำนานในการถอดรหัส
นิคค็อกซ์

R มีคำสั่งmonthplotซึ่งสามารถใช้ได้จริงกับข้อมูลรายสัปดาห์ - ดูstackoverflow.com/questions/5826703/…
Silverfish

5

กราฟเส้นอาจจะตีความได้ง่ายกว่าถ้าคุณใช้เวลาเฉลี่ยเคลื่อนที่เจ็ดวัน, สิบสี่วันหรือ 28 วัน นั่นจะทำให้พวกเขาเรียบและยังช่วยให้คุณมองเห็นแนวโน้ม

สิ่งนี้มีความคล้ายคลึงกันกับวิธีแก้ปัญหาของ Peter Flom แต่ค่อนข้างง่ายและด้วยเหตุนี้จึงไม่ได้บอกภาพที่ค่อนข้างเต็ม - แต่มันอาจเพียงพอสำหรับความต้องการของคุณ หากคุณกำลังบันทึกข้อมูลของคุณในสเปรดชีตมันมีข้อได้เปรียบที่สามารถทำให้ค่าเฉลี่ยดังกล่าวได้อย่างง่ายดายภายในสเปรดชีตตัวเองโดยการตั้งค่าบางสูตรและกราฟจะอัปเดตโดยอัตโนมัติเมื่อคุณกรอกข้อมูลใหม่

อัปเดตเพื่อรวมกราฟ

กราฟเส้นสำหรับการย้ายค่าเฉลี่ย

กราฟสเปรดชีตสำหรับค่าเฉลี่ยการหมุนเจ็ดวันนั้นไม่เหมือนใคร แต่ดูเหมือนว่าจะทำงานได้ดี - การเปลี่ยนแปลงรายวันนั้นราบรื่นดังนั้นแนวโน้มจะตรวจจับได้ง่ายกว่า (เทียบกับแผนภูมิรายวันที่เทียบเท่าซึ่งมีเสียงดังจนเข้าใจยาก) พล็อตนี้มีฟีเจอร์หลักบางอย่างที่ได้รับความนิยมตัวอย่างเช่นมีงานจำนวนมากที่ทำในช่วงกลางเดือนมกราคมในรูปแบบรายชั่วโมง แต่ไม่ได้มาพร้อมกับการเพิ่มขึ้นของหน้าเฉลี่ยต่อวัน การหยุดคริสต์มาสจะมองเห็นได้ชัดเจนและตราบใดที่จุดข้อมูลแต่ละจุดมีการพล็อตชัดเจนแล้วก็ไม่ทำให้เข้าใจผิดมากเกินไป (ถ้ามีเพียงเส้นที่มองเห็นได้มันจะเป็นไปไม่ได้ที่จะตัดสินว่าช่วงเวลาแบนนั้นเกิดจากการขาดข้อมูล!) อย่างไรก็ตามฉันขอแนะนำอย่างยิ่งรวมถึง1.5

ด้วยข้อมูลเพียงห้าสิบรายการดูเหมือนจะไม่คุ้มค่าที่จะลองหาค่าเฉลี่ยเป็นระยะเวลานานกว่าเพื่อตรวจสอบแนวโน้มการทำงานที่ยาวนานขึ้น ในทำนองเดียวกันฉันสงสัยว่าความคิดที่ยอดเยี่ยมของ Peter Flom เกี่ยวกับการย่อยสลายตามฤดูกาลจะต่อสู้กับข้อมูลที่ จำกัด เช่นนี้ หากคุณต้องดำเนินการย่อยสลายในสเปรดชีตของคุณมันจะยิ่งมีความสำคัญยิ่งขึ้นหากรวมตัวแบ่งเป็นศูนย์

หากต้องการสร้างสูตรของฉันซ้ำให้วางสิ่งนี้เพื่อให้ 'วันที่' อยู่ในเซลล์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-code และ ggplot2-package ต่อไปนี้เพื่อสร้างพล็อตแรกนี้ ข้อมูลของคุณได้รับการโหลดลงในข้อมูลวัตถุในรหัสด้านล่าง พล็อตคือพล็อตบาร์ที่จัดกลุ่มพร้อมกับแถบสีเทาที่ระบุจำนวนเงินรายสัปดาห์ของหน้า

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 วัน คุณสามารถหลีกเลี่ยงปัญหานี้ได้อย่างง่ายดาย

หากคุณยืนยันในการแสดงหน้าและเวลาพร้อมกันคุณสามารถทำพล็อตบาร์ย้อนหลังไปด้านหลัง อาจสับสนเล็กน้อยเนื่องจากเครื่องชั่งแนวตั้งสองเครื่องไม่เหมือนกัน ในทางกลับกันมันอาจเป็นการดีที่จะเปรียบเทียบเวลาที่ใช้ไปกับงานที่ทำแบบนี้

รวมเวลาและหน้าในพล็อตจากด้านหลังไปด้านหลัง

แก้ไข: การตระหนักว่าสีไม่จำเป็นต้องมากและแรงบันดาลใจจาก xan (ดูความคิดเห็นด้านล่าง) คุณสามารถลดความซับซ้อนของพล็อตเรื่องนี้ ฉันได้ทำเครื่องหมายวันพฤหัสบดีเพื่อให้คู่มือภาพเพิ่มเติม คุณสามารถโต้เถียงกับการใช้สีเดียวกันสำหรับแถบทั้งหมดเพื่อไม่เน้นมากเกินไป (โดยพลการ) บางวัน

รุ่นที่ง่ายกว่า

ในบันทึกสุดท้ายคุณสามารถลองปรับแกนให้แตกต่างกันโดยการหารค่าของคุณด้วยค่าเฉลี่ย สิ่งนี้จะทำให้ 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

xY

  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

คุณสามารถพล็อตในแบบ 3 มิติ ฉันไม่ได้ตรวจสอบว่าวันในสัปดาห์คำนวณอย่างถูกต้องค้นหามุมมองที่ดีที่สุด ฯลฯ แต่นี่ควรให้แนวคิดแก่คุณ การปรุงแต่งเพิ่มเติมก็เป็นไปได้ ตัวอย่างเช่นอาจเป็นการดีกว่าที่จะเชื่อมต่อจุดต่างๆด้วยเส้นและย้ายเส้นตารางเพื่อให้สอดคล้องกับทุกวันจันทร์

ที่จริงแล้วสิ่งที่น่าสนใจมาก ๆ คือการลองใช้กริดไลน์ซ้าย - ขวาและขึ้น - ลง (ดังที่แสดงในมุมนี้) ตรงกับวันเดียวกันของสัปดาห์ (เช่นวันจันทร์) จากนั้นให้วางโครงบนด้านล่างและผนังด้านหลังขวาภายใน เส้นกริด บ็อกซ์บ็อตจะสอดคล้องกับชั่วโมงรวมและจำนวนหน้าทั้งหมดในแต่ละสัปดาห์ตามลำดับ ฉันใกล้จะแน่ใจว่าจะเป็นไปได้ที่จะทำกับ 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

heatmap ต่อไปนี้กับหมายเลขสัปดาห์ (ของปี) วันในสัปดาห์และ facets สำหรับชั่วโมงและหน้าอาจเป็นประโยชน์:

ป้อนคำอธิบายรูปภาพที่นี่

การลบค่าสูง 2 ค่าจะทำให้การไล่ระดับสีดีขึ้นในการลงจุด:

ป้อนคำอธิบายรูปภาพที่นี่

barchart ต่อไปนี้อาจเป็นประโยชน์

ป้อนคำอธิบายรูปภาพที่นี่

มันแสดงให้เห็นชัดเจนว่าเป็นระยะเวลา 2 สัปดาห์เมื่อไม่มีงานทำ

พล็อตที่มีเส้นอาจมีประโยชน์ (เส้นไม่รก; จุดสามารถลบออกได้ทำให้มีเพียงสองบรรทัด)

ป้อนคำอธิบายรูปภาพที่นี่

พวกเขานำเสนอข้อมูลอย่างชัดเจนในขณะที่ลดความซับซ้อนของพล็อตเพื่อความเข้าใจง่าย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.