Biểu đồ dòng ggplot2 cung cấp cho Geom_path: Mỗi nhóm chỉ bao gồm một quan sát. Bạn có cần điều chỉnh thẩm mỹ nhóm không?


170

Với khung dữ liệu này ("df"):

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

Tôi cố gắng tạo một biểu đồ đường như thế này:

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

Lỗi tôi nhận được là:

geom_path: Mỗi nhóm chỉ bao gồm một quan sát. Bạn có cần điều chỉnh thẩm mỹ nhóm?

Biểu đồ xuất hiện dưới dạng biểu đồ phân tán mặc dù tôi muốn có biểu đồ đường. Tôi cố gắng để thay thế geom_line()với geom_line(aes(group = year))nhưng điều đó không làm việc.

Trong một câu trả lời tôi đã nói để chuyển đổi năm thành một biến nhân tố. Tôi đã làm và vấn đề vẫn tồn tại. Đây là đầu ra của 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")

Nó không có lỗi khi tôi chạy nó. Có khả năng đó dfkhông phải là những gì bạn nghĩ. Vui lòng nêu câu hỏi của bạn ở dạng có thể lặp lại, tức là hiển thị đầu ra của dput(df).
G. Grothendieck

có thể là các biến của bạn là các yếu tố, sau đó bạn cần chuyển đổi chúng thành số
củ cải đường

@ G.Grothendieck Tôi đã đăng những gì bạn nói. Tôi cũng đã chuyển đổi sang số và vẫn có vấn đề.
megashigger

Bạn thực sự nên nêu câu hỏi ở dạng tái sản xuất. Thật khó để giúp bạn nếu chúng tôi không thể tạo lại lỗi.
Mario Becerra

Câu trả lời:


344

Bạn chỉ phải thêm group = 1vào ggplot hoặc geom_line aes ().

Đối với biểu đồ đường, các điểm dữ liệu phải được nhóm lại để nó biết điểm nào sẽ kết nối. Trong trường hợp này, nó đơn giản - tất cả các điểm nên được kết nối, vì vậy nhóm = 1. Khi nhiều biến được sử dụng và nhiều dòng được rút ra, việc nhóm các dòng thường được thực hiện theo biến.

Tham khảo: Cookbook cho R, Chương: Đồ thị Bar_and_line_graphs_ (ggplot2), Biểu đồ đường.

Thử cái này:

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

Lưu ý, việc phân nhóm phải được thực hiện với groupđối số. Chỉ nhóm, ví dụ như colorsẽ không đủ. Tôi chỉ gặp rắc rối này và hy vọng điều này sẽ giúp ai đó chạy vào cùng
Tjebo

câu trả lời này có còn hiệu lực không? Thêm nhóm = 1 trong thẩm mỹ dường như không còn hoạt động nữa.
Giacomo

@Giacomo - hoạt động với tôi, vào ngày 3.6.2 trên máy Mac. Đã nhận được cảnh báo đáng sợ, nhưng thêm nhóm = 1 đã khắc phục vấn đề. ggplot (lakemeta, maps = aes (x = Lake, y = Area, group = 1)) + geom_line (size = 2, color = "blue")
Jenn D.

27

Bạn gặp lỗi này vì một trong các biến của bạn thực sự là biến nhân tố. Hành hình

str(df) 

để kiểm tra điều này Sau đó thực hiện thay đổi biến kép này để giữ số năm thay vì chuyển thành số cấp "1,2,3,4":

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

EDIT: có vẻ như data.frame của bạn có một biến lớp "mảng" có thể gây ra pb. Hãy thử sau:

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

và âm mưu một lần nữa?


3
Đây là một câu trả lời tiện lợi cho tôi vì nó khắc phục vấn đề từ gốc
Medhat

1
Câu trả lời tốt để ngăn chặn cảnh báo này!
Mihai

2

Tôi gặp vấn đề tương tự với khung dữ liệu:

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

Tôi nghĩ rằng biến cho trục x phải là số, để geom_line biết cách kết nối các điểm để vẽ đường.

sau khi tôi thay đổi cột thứ 2 thành số:

 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

sau đó nó hoạt động.


1

Khởi động R trong một phiên mới và dán vào:

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

Khởi động R trong một phiên mới và dán mã trong bài viết của tôi vào đó.
G. Grothendieck

Bạn đã tìm ra vấn đề này. Tôi có cùng một vấn đề với bạn mà tôi chỉ có một giá trị cho mỗi giá trị x. Mong đợi phản hồi của bạn. Cảm ơn.
Hoàng Lê

0

Tôi nhận được một lời nhắc tương tự. Đó là bởi vì tôi đã chỉ định trục x theo tỷ lệ phần trăm (ví dụ: 10% A, 20% B, ....). Vì vậy, một cách tiếp cận khác có thể là bạn nhân các giá trị này và viết chúng ở dạng đơn giản nhất.

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.