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

실제로 재현 가능한 형태로 질문을해야합니다. 오류를 재현 할 수 없으면 도움이되지 않습니다.
마리오 Becerra

답변:


344

group = 1ggplot 또는 geom_line aes () 에만 추가하면 됩니다.

선 그래프의 경우 연결할 포인트를 알 수 있도록 데이터 포인트를 그룹화해야합니다. 이 경우 간단합니다. 모든 포인트를 연결해야하므로 group = 1입니다. 더 많은 변수가 사용되고 여러 선이 그려지면 선 그룹화는 대개 변수에 의해 수행됩니다.

참조 : Cookbook for R, Chapter : Graphs 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

이 답변이 여전히 유효합니까? 미학에 group = 1을 추가해도 더 이상 작동하지 않는 것 같습니다.
Giacomo

@Giacomo-Mac의 3.6.2에서 작동합니다. 끔찍한 경고를 받았지만 group = 1을 추가하면 문제가 해결되었습니다. ggplot (lakemeta, mapping = aes (x = Lake, y = Area, group = 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
이 경고를 방지하는 좋은 답변입니다!
Mihai

2

데이터 프레임과 비슷한 문제가있었습니다.

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

geom_line이 점을 연결하여 선을 그리는 방법을 알 수 있도록 x 축의 변수는 숫자 여야한다고 생각합니다.

두 번째 열을 숫자로 변경 한 후 :

 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.