การแสดงตัวแปรจำนวนมากในหนึ่งพล็อต


25

ฉันต้องการแสดงให้เห็นว่าคุณค่าของตัวแปรบางตัว (~ 15) เปลี่ยนแปลงไปอย่างไรเมื่อเวลาผ่านไป แต่ฉันอยากจะแสดงให้เห็นว่าตัวแปรแตกต่างจากกันในแต่ละปีอย่างไร ดังนั้นฉันจึงสร้างพล็อตนี้:

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

แต่แม้ว่าเมื่อเปลี่ยนชุดรูปแบบสีหรือเพิ่มประเภทของเส้น / รูปร่างที่แตกต่างกันก็ดูยุ่งเหยิง มีวิธีที่ดีกว่าในการมองเห็นข้อมูลประเภทนี้หรือไม่?

ทดสอบข้อมูลด้วยรหัส R:

structure(list(Var = structure(c(1L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 
6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 
8L, 8L, 8L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 11L, 11L, 11L, 11L, 11L, 
11L, 11L, 12L, 12L, 12L, 12L, 12L, 12L, 13L, 14L, 14L, 14L, 14L, 
14L, 14L, 14L, 16L, 16L, 16L, 16L, 16L, 16L, 17L, 17L, 17L, 17L, 
17L, 17L, 17L, 18L, 18L, 18L, 18L, 18L, 18L, 18L), .Label = c("A", 
"B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", 
"O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"), class = "factor"), 
    Year = c(2015L, 1991L, 1993L, 1996L, 2000L, 2004L, 2011L, 
    2015L, 1991L, 1993L, 1996L, 2000L, 2004L, 2011L, 2015L, 1991L, 
    1993L, 1996L, 2000L, 2004L, 2011L, 2015L, 1993L, 1996L, 2000L, 
    2004L, 2011L, 2015L, 1991L, 1993L, 1996L, 2000L, 2004L, 2011L, 
    2015L, 1991L, 1993L, 1996L, 2000L, 2004L, 2011L, 2015L, 1991L, 
    1993L, 1996L, 2000L, 2004L, 2011L, 2015L, 1991L, 1993L, 1996L, 
    2000L, 2004L, 2011L, 2015L, 1993L, 1996L, 2000L, 2004L, 2011L, 
    2015L, 2015L, 1991L, 1993L, 1996L, 2000L, 2004L, 2011L, 2015L, 
    1991L, 1993L, 1996L, 2000L, 2011L, 2015L, 1991L, 1993L, 1996L, 
    2000L, 2004L, 2011L, 2015L, 1991L, 1993L, 1996L, 2000L, 2004L, 
    2011L, 2015L), Val = c(25.6, 22.93, 20.82, 24.1, 24.5, 29, 
    25.55, 24.5, 24.52, 20.73, 25.8, 25.5, 29.5, 27.7, 25.1, 
    25, 24.55, 26.75, 25, 30.5, 27.25, 25.1, 22.4, 27.07, 26, 
    29, 27.2, 24.2, 23, 24.27, 27.68, 27, 30.5, 28.1, 24.9, 23.75, 
    22.75, 27.25, 25, 29, 28.45, 24, 20.25, 17.07, 24.45, 25, 
    28.5, 26.75, 24.9, 21.25, 20.65, 25.1, 24.5, 26.5, 25.35, 
    23.5, 21.93, 26.5, 24.5, 29, 29.1, 26.4, 28.1, 23.75, 26.5, 
    28.05, 27, 30.5, 25.65, 23.3, 23.25, 24.57, 26.07, 27.5, 
    28.85, 27.7, 22, 23.43, 26.88, 27, 30.5, 29.25, 28.1, 23, 
    23.8, 28.32, 27, 29.5, 29.15, 27.6)), row.names = c(1L, 4L, 
5L, 6L, 7L, 8L, 9L, 10L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 
21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L, 30L, 31L, 32L, 35L, 
36L, 37L, 38L, 39L, 40L, 41L, 44L, 45L, 46L, 47L, 48L, 49L, 50L, 
53L, 54L, 55L, 56L, 57L, 58L, 59L, 62L, 63L, 64L, 65L, 66L, 67L, 
68L, 69L, 70L, 71L, 72L, 73L, 74L, 75L, 78L, 79L, 80L, 81L, 82L, 
83L, 84L, 87L, 88L, 89L, 90L, 91L, 92L, 95L, 96L, 97L, 98L, 99L, 
100L, 101L, 104L, 105L, 106L, 107L, 108L, 109L, 110L), na.action = structure(c(2L, 
3L, 11L, 12L, 33L, 34L, 42L, 43L, 51L, 52L, 60L, 61L, 76L, 77L, 
85L, 86L, 93L, 94L, 102L, 103L), .Names = c("2", "3", "11", "12", 
"33", "34", "42", "43", "51", "52", "60", "61", "76", "77", "85", 
"86", "93", "94", "102", "103"), class = "omit"), class = "data.frame", .Names = c("Var", 
"Year", "Val"))

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

ดูคำแนะนำเพิ่มเติมได้ในstats.stackexchange.com/questions/126480/…
Nick Cox

@NickCox แน่นอนควรมีความคิดก่อนหน้านี้! ฉันออกจากพื้นที่สีเขียวเนื่องจากไม่จำเป็น (จะแสดงเฉพาะช่วงของค่าที่ถือว่า "เพียงพอ")

คำตอบ:


42

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

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

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

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

ในกรณีนี้มีการเน้นรายละเอียดของความสำคัญในทางปฏิบัติหรือทางวิทยาศาสตร์หรือความสนใจที่เป็นไปได้:

  1. เรามีค่าเดียวสำหรับ A และ M

  2. เราไม่มีค่าทั้งหมดสำหรับปีที่ระบุในกรณีอื่นทั้งหมด

  3. บางกลุ่มพล็อตสูงบางต่ำและอื่น ๆ

ฉันจะไม่พยายามตีความที่นี่: ข้อมูลนั้นไม่ระบุชื่อ แต่นั่นเป็นข้อกังวลของนักวิจัยไม่ว่าในกรณีใด

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

ปัญหาที่ใหญ่กว่าคือกลยุทธ์นี้จะใช้งานได้ไกลแค่ไหน จำนวนกลุ่มเป็นตัวขับเคลื่อนหลักมากกว่าจำนวนคะแนนในแต่ละกลุ่ม วิธีการพูดอาจใช้งานได้ประมาณ 25 กลุ่ม (จอแสดงผล 5 x 5 พูด): ด้วยกลุ่มอื่น ๆ ไม่เพียง แต่กราฟจะเล็กลงและอ่านยากขึ้นเท่านั้น แต่นักวิจัยยังสูญเสียความชอบในการสแกน แผง หากมีกลุ่มเป็นร้อย (พัน, ... ) ก็มักจะจำเป็นต้องเลือกกลุ่มที่จะแสดงจำนวนน้อย เกณฑ์บางอย่างเช่นการเลือก "ปกติ" และ "สุดขั้ว" บางอย่างอาจจำเป็นต้องมี ที่ควรขับเคลื่อนด้วยเป้าหมายของโครงการและความคิดของสิ่งที่เหมาะสมสำหรับแต่ละชุดข้อมูล อีกวิธีหนึ่งที่มีประสิทธิภาพคือการเน้นชุดข้อมูลจำนวนเล็กน้อยในแต่ละแผง ดังนั้น, หากมีกลุ่มกว้าง 25 กลุ่มแต่ละกลุ่มสามารถแสดงพร้อมกับกลุ่มอื่นทั้งหมดเป็นฉากหลังได้ หรืออาจมีค่าเฉลี่ยหรือการสรุปอื่น ๆ การใช้ (เช่น) ส่วนประกอบหลักหรือส่วนประกอบอิสระอาจเป็นแนวคิดที่ดีเช่นกัน

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

ข้อมูลอ้างอิงบางส่วนสำหรับวิธีการนี้

Cox, NJ 2010 ชุดย่อยกราฟ Stata Journal 10: 670-681

Knaflic, CN 2015 การเล่าเรื่องด้วยข้อมูล: คู่มือการสร้างภาพข้อมูลสำหรับนักธุรกิจ โฮโบเก้นนิวเจอร์ซีย์: ไวลีย์

Koenker, R. 2005. การถดถอยเชิงปริมาณ Cambridge: สำนักพิมพ์มหาวิทยาลัยเคมบริดจ์ ดู pp.12-13

Schwabish, JA 2014 คู่มือนักเศรษฐศาสตร์เกี่ยวกับการแสดงข้อมูลเป็นภาพ วารสารมุมมองทางเศรษฐกิจ 28: 209-234

Unwin, A. 2015. การวิเคราะห์ข้อมูลแบบกราฟิกด้วย R. Boca Raton, FL: CRC Press

Wallgren, A. , B. Wallgren, R. Persson, U. Jorner และ J.-A. Haaland 1996. สถิติกราฟและข้อมูล: การสร้างแผนภูมิที่ดีขึ้น Newbury Park, CA: Sage

หมายเหตุ: กราฟถูกสร้างใน Stata จะต้องติดตั้งครั้งแรกกับsubsetplot ssc inst subsetplotข้อมูลที่ถูกคัดลอกและวางจาก R 90 95 00 05 10 15และความคุ้มค่าป้ายถูกกำหนดที่จะแสดงปีเป็น คำสั่งหลักคือ

subsetplot connected Val Year, by(Var) c(L) lcolor(gs12) backdrop(line) xtitle("") combine(imargin(small)) subset(lcolor(blue) mcolor(blue))

แก้ไขการอ้างอิงเพิ่มเติมพฤษภาคม, กันยายน, ธันวาคม 2016; เมษายน, มิถุนายน 2017, ธันวาคม 2018, เมษายน 2019:

Cairo, A. 2016. The Truthful Art: Data, Charts และ Maps สำหรับการสื่อสาร ซานฟรานซิสโก: ผู้ขับขี่ใหม่ p.211

Camõesเจ 2016 ข้อมูลในการทำงาน: Best Practices สำหรับการสร้างแผนภูมิที่มีประสิทธิภาพและข้อมูลกราฟิกใน Microsoft Excel ซานฟรานซิสโก: ผู้ขับขี่ใหม่ p.354

Carr, DB และ Pickle, LW 2010 การแสดงรูปแบบข้อมูลด้วย Micromaps Boca Raton, FL: CRC Press p.85

Grant, R. 2019. การสร้างภาพข้อมูล: แผนภูมิแผนที่และกราฟิกแบบอินเทอร์แอคทีฟ Boca Raton, FL: CRC Press หน้า 52

Koponen, J. และHildén, J. 2019 คู่มือการสร้างภาพข้อมูล Espoo: หนังสือ Aalto ARTS ดูหน้า 101

Kriebel, A. และ Murray, E. 2018 #MakeoverMonday: การปรับปรุงวิธีที่เราเห็นภาพและวิเคราะห์ข้อมูลหนึ่งแผนภูมิในแต่ละครั้ง โฮโบเคนนิวเจอร์ซีย์: จอห์นไวลีย์ p.303

Rougier, NP, Droettboom, M. และ Bourne, PE 2014 สิบกฎง่ายๆสำหรับตัวเลขที่ดีกว่า ชีววิทยาการคำนวณ PLOS 10 (9): e1003833 ดอย: 10.1371 / journal.pcbi.1003833 ลิงก์ที่นี่

Schwabish, J. 2017. การนำเสนอที่ดีกว่า: คู่มือสำหรับนักวิชาการ, นักวิจัยและ Wonks นิวยอร์ก: สำนักพิมพ์มหาวิทยาลัยโคลัมเบีย ดูหน้า 89

Wickham, H. 2016. ggplot2: กราฟิคที่สวยงามสำหรับการวิเคราะห์ข้อมูล จาม: สปริงเกอร์ ดู p.157


+1 ยอดเยี่ยมมีฟังก์ชัน R หรือ SAS ที่สามารถทำแผนภูมิประเภทนี้ได้หรือไม่ มันยอดเยี่ยมจริงๆ
พยากรณ์

ฉันชอบความคิดนี้จริงๆ! เพียงแค่สงสัยเกี่ยวกับวิธีที่ดีที่สุดในการลงจุดใน R โดยใช้ ggplot2 ฉันจะรอสักครู่ก่อนที่จะยอมรับคำตอบหวังว่าไม่เป็นไร

2
ขออภัยฉันไม่รู้ว่าจะทำอะไรใน SAS แน่นอนว่า Stata สามารถทำได้ R สามารถทำได้ดีขึ้นเรื่อย ๆ หรือดังนั้นผู้ใช้จะบอกฉันต่อไป ...
Nick Cox

@ NickCox ไม่ใช่ปัญหาเลยฉันคิดออกมันดูดีจริงๆและเหมาะสำหรับวัตถุประสงค์ของฉัน

@ NickCox มีการอ้างอิงอีกสองรายการคือ 1. องค์ประกอบของกราฟข้อมูลโดย WS Clevelandหนังสือเล่มใหม่ 2. การเล่าเรื่องพร้อมข้อมูล: คู่มือการแสดงข้อมูลสำหรับนักธุรกิจโดย Cole Nussbaumer Knaflicหนังสือเล่มนี้ (# 2) มีกรณีศึกษา บทที่เรียกว่า "กลยุทธ์ในการหลีกเลี่ยงกราฟสปาเก็ตตี้"
พยากรณ์

22

ในฐานะที่เป็นส่วนเติมเต็มให้กับคำตอบของ Nick ต่อไปนี้เป็นรหัส R บางประการสำหรับการทำพล็อตที่คล้ายกันโดยใช้ข้อมูลจำลอง:

library(ggplot2)

get_df <- function(label="group A", n_obs=10, drift=runif(1)) {
    df <- data.frame(time=seq(1, n_obs), label=label)
    df$y <- df$time * drift + cumsum(rnorm(n_obs))
    return(df)
}
df_list <- lapply(sprintf("group %s", toupper(letters[1:9])),
                  function(label) { get_df(label) })
df <- do.call(rbind, df_list)
df$label2 <- df$label

p <- (ggplot(df, aes(x=time, y=y, group=label2)) +
      geom_line(size=0.9, alpha=0.8,
                data=df[, c("time", "y", "label2")], color="grey") +
      geom_line(size=1.1, color="black") +
      ylab("") +
      theme_bw() +
      theme(panel.border=element_blank()) +
      theme(strip.background=element_blank()) +
      facet_wrap(~ label))
p
ggsave("example_facet.png", p, width=10, height=8)

พล็อตตัวอย่าง


6

สำหรับผู้ที่ต้องการที่จะใช้ggplot2วิธีการในการวิจัยพิจารณาฟังก์ชั่นในแพคเกจfacetshade extracatวิธีนี้มีวิธีการทั่วไปไม่เพียง แต่สำหรับการแปลงบรรทัด นี่คือตัวอย่างที่มี scatterplots (จากส่วนท้ายของหน้านี้ ):

data(olives, package="extracat")
library(scales)
fs1 <- facetshade(data = olives,
                  aes(x = palmitic, y = palmitoleic), f = .~Area)
fs1 + geom_point(colour = alpha("black", 0.05)) +
      geom_point(data = olives, colour = "red") +
      facet_wrap(f=~Area, nrow=3) + theme(legend.position="none")

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


แก้ไข: การใช้ชุดข้อมูลจำลองของ Adrian จากคำตอบก่อนหน้านี้ของเขา:

library(extracat)
facetshade(df, aes(x=time, y=y), f = .~label, bg.all = FALSE, keep.orig = TRUE) +
           geom_line(aes(x=time, y=y, group=orig.label),colour = alpha(1,0.3)) +
           geom_line(data=df, aes(colour=label), size = 1.2) + xlab("") + ylab("")

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

data(olives, package="extracat")
ggplot(olives, aes(palmitic, palmitoleic)) + 
  facet_wrap(~Area, nrow=3) + 
  geom_point(data=olives %>% select(-Area), colour=alpha("black", 0.05)) + 
  geom_point(data=olives, colour="red") + 
  theme(legend.position="none")

1
ดูเหมือนว่าวิธีการทั่วไปที่ดี (+1) แต่ตัวอย่างที่เฉพาะเจาะจงนั้นเกี่ยวข้องกับปัญหาอื่นมากกว่า พวงของแผนการกระจายซ้ำที่เน้นภูมิภาคที่แตกต่างกันจะไม่ทำงานสำหรับคำถามที่เกี่ยวกับอนุกรมเวลา
Sextus Empiricus

@martin จริง ๆ แล้วมันเป็นโซลูชันของเอเดรียนด้วย โปรดทราบว่าเขาใช้ตัวแปรการติดฉลากที่เหมือนกันสองตัวเพื่อให้สามารถทิ้งในเลเยอร์พื้นหลังได้ แนวคิดการเขียนโค้ดมีความชัดเจนมากขึ้นด้วยสัญกรณ์ที่เป็นระเบียบด้านล่างและบ่อยครั้งที่การจัดรูปแบบที่สวยงามของกราฟิกสามารถปกปิดส่วนสำคัญของรหัสได้ ggplot(df %>% select(-label), aes(x=time, y=y, group=label2)) + geom_line(alpha=0.8, color="grey") + labs(y=NULL) + geom_line(data=df, color="red") + facet_wrap(~ label)
Antony Unwin

5

นี่คือทางออกที่ได้รับแรงบันดาลใจจาก Ch. 11.3 ส่วนที่เกี่ยวกับ "เท็กซัสข้อมูลที่อยู่อาศัย" ในหนังสือแฮดลีย์วิคแฮมใน ggplot2 ที่นี่ฉันพอดีกับตัวแบบเชิงเส้นกับอนุกรมเวลาแต่ละครั้งใช้ส่วนที่เหลือ (ซึ่งอยู่ตรงกลางค่าเฉลี่ย 0) และวาดเส้นสรุปในสีที่แตกต่างกัน

library(ggplot2)
library(dplyr)
#works with dplyr version 0.4.3.9000 from Github (hadley/dplyr@4f2d7f8), or higher

df1 <- as.data.frame(list(Var = structure(c(1L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 
                                 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 8L, 8L, 8L, 8L, 
                                 8L, 8L, 8L, 9L, 9L, 9L, 9L, 9L, 9L, 9L, 11L, 11L, 11L, 11L, 11L, 
                                 11L, 11L, 12L, 12L, 12L, 12L, 12L, 12L, 13L, 14L, 14L, 14L, 14L, 
                                 14L, 14L, 14L, 16L, 16L, 16L, 16L, 16L, 16L, 17L, 17L, 17L, 17L, 
                                 17L, 17L, 17L, 18L, 18L, 18L, 18L, 18L, 18L, 18L), .Label = c("A", 
                                                                                               "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", 
                                                                                               "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"), class = "factor"), 
               Year = c(2015L, 1991L, 1993L, 1996L, 2000L, 2004L, 2011L, 
                        2015L, 1991L, 1993L, 1996L, 2000L, 2004L, 2011L, 2015L, 1991L, 
                        1993L, 1996L, 2000L, 2004L, 2011L, 2015L, 1993L, 1996L, 2000L, 
                        2004L, 2011L, 2015L, 1991L, 1993L, 1996L, 2000L, 2004L, 2011L, 
                        2015L, 1991L, 1993L, 1996L, 2000L, 2004L, 2011L, 2015L, 1991L, 
                        1993L, 1996L, 2000L, 2004L, 2011L, 2015L, 1991L, 1993L, 1996L, 
                        2000L, 2004L, 2011L, 2015L, 1993L, 1996L, 2000L, 2004L, 2011L, 
                        2015L, 2015L, 1991L, 1993L, 1996L, 2000L, 2004L, 2011L, 2015L, 
                        1991L, 1993L, 1996L, 2000L, 2011L, 2015L, 1991L, 1993L, 1996L, 
                        2000L, 2004L, 2011L, 2015L, 1991L, 1993L, 1996L, 2000L, 2004L, 
                        2011L, 2015L), 
               Val = c(25.6, 22.93, 20.82, 24.1, 24.5, 29, 
                       25.55, 24.5, 24.52, 20.73, 25.8, 25.5, 29.5, 27.7, 25.1, 
                       25, 24.55, 26.75, 25, 30.5, 27.25, 25.1, 22.4, 27.07, 26, 
                       29, 27.2, 24.2, 23, 24.27, 27.68, 27, 30.5, 28.1, 24.9, 23.75, 
                       22.75, 27.25, 25, 29, 28.45, 24, 20.25, 17.07, 24.45, 25, 
                       28.5, 26.75, 24.9, 21.25, 20.65, 25.1, 24.5, 26.5, 25.35, 
                       23.5, 21.93, 26.5, 24.5, 29, 29.1, 26.4, 28.1, 23.75, 26.5, 
                       28.05, 27, 30.5, 25.65, 23.3, 23.25, 24.57, 26.07, 27.5, 
                       28.85, 27.7, 22, 23.43, 26.88, 27, 30.5, 29.25, 28.1, 23, 
                       23.8, 28.32, 27, 29.5, 29.15, 27.6)), 
               row.names = c(1L, 4L, 
                           5L, 6L, 7L, 8L, 9L, 10L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 
                           21L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L, 30L, 31L, 32L, 35L, 
                           36L, 37L, 38L, 39L, 40L, 41L, 44L, 45L, 46L, 47L, 48L, 49L, 50L, 
                           53L, 54L, 55L, 56L, 57L, 58L, 59L, 62L, 63L, 64L, 65L, 66L, 67L, 
                           68L, 69L, 70L, 71L, 72L, 73L, 74L, 75L, 78L, 79L, 80L, 81L, 82L, 
                           83L, 84L, 87L, 88L, 89L, 90L, 91L, 92L, 95L, 96L, 97L, 98L, 99L, 
                           100L, 101L, 104L, 105L, 106L, 107L, 108L, 109L, 110L), 
               na.action = structure(c(2L, 
                          3L, 11L, 12L, 33L, 34L, 42L, 43L, 51L, 52L, 60L, 61L, 76L, 77L, 
                          85L, 86L, 93L, 94L, 102L, 103L), 
                .Names = c("2", "3", "11", "12","33", "34", "42", "43", "51", "52", "60", 
                           "61", "76", "77", "85", "86", "93", "94", "102", "103"), class = "omit"), 
                class = "data.frame", .Names = c("Var","Year", "Val"))


df1 %>%
        group_by(Var) %>%
        do(mutate(.,resid = resid(lm(Val ~ Year, data=., na.action = na.exclude)))) %>%
        ggplot(aes(Year, resid)) +
        labs(y=paste0("Val "), x="Year") +
        geom_line(aes(group = Var), alpha = 1/5) +
        geom_line(stat = "summary", fun.y = "mean", colour = "red")

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


1
แนวคิดหลักที่นี่น่าจะเป็นที่คุณสามารถเพิ่มเส้นโค้งสรุปบางชนิดเพื่อช่วยให้ตาและจิตใจ เห็นด้วย แต่ในคำตอบของคุณคุณสามารถสะกดออกการแลกเปลี่ยนในการเปลี่ยนเป็นค่าเฉลี่ย (หรือระดับอ้างอิง) 0 แทนที่จะออกจากหน่วยและค่าเดิม ผู้เชี่ยวชาญและ / หรือลูกค้าในเรื่องที่สำคัญอาจคิดในแง่ของ 24 หรือ 28 หรือคุณค่าใด ๆ ก็ตาม โดยปกติข้อมูลที่นี่เป็นเพียงยานพาหนะสำหรับการสนทนา แต่ประเด็นนี้เป็นเรื่องทั่วไป
Nick Cox
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.