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.