แผนภูมิเส้น ggplot2 ให้ "geom_path: แต่ละกลุ่มประกอบด้วยการสังเกตเพียงครั้งเดียว คุณจำเป็นต้องปรับเปลี่ยนสุนทรียภาพของกลุ่มหรือไม่?”


170

ด้วยกรอบข้อมูลนี้ ("df"):

year pollution
1 1999 346.82000
2 2002 134.30882
3 2005 130.43038
4 2008  88.27546

ฉันพยายามสร้างแผนภูมิเส้นแบบนี้:

  plot5 <- ggplot(df, aes(year, pollution)) +
           geom_point() +
           geom_line() +
           labs(x = "Year", y = "Particulate matter emissions (tons)", title = "Motor vehicle emissions in Baltimore")

ข้อผิดพลาดที่ฉันได้รับคือ:

geom_path: แต่ละกลุ่มประกอบด้วยการสังเกตเพียงครั้งเดียว คุณจำเป็นต้องปรับเปลี่ยนสุนทรียภาพของกลุ่มหรือไม่?

แผนภูมิปรากฏเป็นพล็อตกระจายแม้ว่าฉันต้องการแผนภูมิเส้น ฉันพยายามแทนที่geom_line()ด้วยgeom_line(aes(group = year))แต่ก็ไม่ได้ผล

ในคำตอบที่ฉันบอกให้แปลงปีเป็นตัวแปรปัจจัย ฉันทำและปัญหายังคงมีอยู่ นี่คือผลลัพธ์ของstr(df)และdput(df):

'data.frame':   4 obs. of  2 variables:
 $ year     : num  1 2 3 4
 $ pollution: num [1:4(1d)] 346.8 134.3 130.4 88.3
  ..- attr(*, "dimnames")=List of 1
  .. ..$ : chr  "1999" "2002" "2005" "2008"

structure(list(year = c(1, 2, 3, 4), pollution = structure(c(346.82, 
134.308821199349, 130.430379885892, 88.275457392443), .Dim = 4L, .Dimnames = list(
    c("1999", "2002", "2005", "2008")))), .Names = c("year", 
"pollution"), row.names = c(NA, -4L), class = "data.frame")

มันไม่มีข้อผิดพลาดเมื่อฉันเรียกใช้ เป็นไปได้ว่าdfไม่ใช่สิ่งที่คุณคิดว่าเป็น dput(df)กรุณาระบุคำถามของคุณในรูปแบบทำซ้ำได้เช่นแสดงการส่งออกของ
G. Grothendieck

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

@ G.Grothendieck ฉันโพสต์สิ่งที่คุณพูด ฉันยังแปลงเป็นตัวเลขและยังคงมีปัญหา
megashigger

คุณควรระบุคำถามในรูปแบบที่ทำซ้ำได้ เป็นการยากที่จะช่วยคุณหากเราไม่สามารถสร้างข้อผิดพลาดได้อีก
Mario Becerra

คำตอบ:


344

คุณจะต้องเพิ่มgroup = 1เข้าไปใน ggplot หรือ geom_line aes ()

สำหรับกราฟเส้นต้องมีการจัดกลุ่มจุดข้อมูลเพื่อให้ทราบว่าจะเชื่อมต่อจุดใด ในกรณีนี้มันง่าย - จุดทั้งหมดควรเชื่อมต่อกันดังนั้น group = 1 เมื่อมีการใช้ตัวแปรเพิ่มเติมและมีการวาดหลายบรรทัดการจัดกลุ่มสำหรับบรรทัดมักจะทำโดยตัวแปร

การอ้างอิง: ตำราสำหรับ R, บทที่: กราฟ Bar_and_line_graphs_ (ggplot2), กราฟเส้น

ลองสิ่งนี้:

plot5 <- ggplot(df, aes(year, pollution, group = 1)) +
         geom_point() +
         geom_line() +
         labs(x = "Year", y = "Particulate matter emissions (tons)", 
              title = "Motor vehicle emissions in Baltimore")

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

คำตอบนี้ยังใช้ได้หรือไม่? การเพิ่มกลุ่ม = 1 ในสุนทรียภาพดูเหมือนจะไม่ทำงานอีกต่อไป
Giacomo

@Giacomo - ใช้งานได้สำหรับฉันบน 3.6.2 บน Mac ได้รับคำเตือนที่หวั่น แต่การเพิ่ม group = 1 แก้ไขปัญหาได้แล้ว ggplot (lakemeta, การทำแผนที่ = aes (x = ทะเลสาบ, y = พื้นที่, กลุ่ม = 1)) + geom_line (size = 2, color = "blue")
Jenn D.

27

คุณได้รับข้อผิดพลาดนี้เนื่องจากหนึ่งในตัวแปรของคุณเป็นตัวแปรปัจจัย ปฏิบัติ

str(df) 

เพื่อตรวจสอบสิ่งนี้ จากนั้นทำการเปลี่ยนแปลงตัวแปรคู่นี้เพื่อเก็บหมายเลขปีไว้แทนที่จะเปลี่ยนเป็นหมายเลขระดับ "1,2,3,4":

df$year <- as.numeric(as.character(df$year))

แก้ไข: ดูเหมือนว่า data.frame ของคุณมีตัวแปรของคลาส "อาร์เรย์" ซึ่งอาจทำให้ pb ลองแล้ว:

df <- data.frame(apply(df, 2, unclass))

และวางแผนอีกครั้ง?


3
นี่เป็นคำตอบที่สะดวกสำหรับฉันเพราะมันแก้ไขปัญหาจากรูท
Medhat

1
คำตอบที่ดีสำหรับการป้องกันคำเตือนนี้!
หมดเวลา

2

ฉันมีปัญหาคล้ายกันกับ data frame:

group time weight.loss
1 Control  wl1    4.500000
2    Diet  wl1    5.333333
3  DietEx  wl1    6.200000
4 Control  wl2    3.333333
5    Diet  wl2    3.916667
6  DietEx  wl2    6.100000
7 Control  wl3    2.083333
8    Diet  wl3    2.250000
9  DietEx  wl3    2.200000

ฉันคิดว่าตัวแปรสำหรับแกน x ควรเป็นตัวเลขเพื่อให้ geom_line รู้วิธีเชื่อมต่อจุดเพื่อวาดเส้น

หลังจากฉันเปลี่ยนคอลัมน์ที่ 2 เป็นตัวเลข:

 group time weight.loss
1 Control    1    4.500000
2    Diet    1    5.333333
3  DietEx    1    6.200000
4 Control    2    3.333333
5    Diet    2    3.916667
6  DietEx    2    6.100000
7 Control    3    2.083333
8    Diet    3    2.250000
9  DietEx    3    2.200000

จากนั้นก็ใช้งานได้


1

เริ่มต้น R ในเซสชันใหม่และวางใน:

library(ggplot2)

df <- structure(list(year = c(1, 2, 3, 4), pollution = structure(c(346.82, 
134.308821199349, 130.430379885892, 88.275457392443), .Dim = 4L, .Dimnames = list(
    c("1999", "2002", "2005", "2008")))), .Names = c("year", 
"pollution"), row.names = c(NA, -4L), class = "data.frame")

df[] <- lapply(df, as.numeric) # make all columns numeric

ggplot(df, aes(year, pollution)) +
           geom_point() +
           geom_line() +
           labs(x = "Year", 
                y = "Particulate matter emissions (tons)", 
                title = "Motor vehicle emissions in Baltimore")

เริ่มต้น R ในเซสชันใหม่และวางรหัสในโพสต์ของฉันลงไป
G. Grothendieck

คุณพบปัญหานี้หรือไม่ ฉันมีปัญหาแบบเดียวกันกับคุณซึ่งฉันมีเพียงค่าเดียวสำหรับแต่ละค่า x รอการตอบกลับของคุณ ขอบคุณ
Hoang Le

0

ฉันได้รับพรอมต์ที่คล้ายกัน เป็นเพราะฉันได้ระบุแกน x ในรูปของเปอร์เซ็นต์ (ตัวอย่างเช่น: 10% A, 20% B, .... ) ดังนั้นวิธีการอื่นอาจเป็นได้ว่าคุณคูณค่าเหล่านี้และเขียนมันในรูปแบบที่ง่ายที่สุด

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