ggplot2折れ線グラフは、「geom_path:各グループは1つの観測のみで構成されています。グループの美的感覚を調整する必要がありますか?」


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:各グループは1つの観測のみで構成されます。グループの美的感覚を調整する必要がありますか?

折れ線グラフが必要なのに、グラフが散布図として表示されます。に置き換えようとしましgeom_line()geom_line(aes(group = year))が、うまくいきませんでした。

答えとして、年を因子変数に変換するように言われました。私はそうしました、そして問題は持続します。これはstr(df)and の出力です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.グロタンディーク

変数が因子である場合、変数を数値に変換する必要があります
ビートルート'22年

@ G.Grothendieck私はあなたが言ったことを投稿しました。私も数値に変換しましたが、まだ問題があります。
megashigger 14年

あなたは本当に質問を再現可能な形で述べるべきです。エラーを再現できない場合、お客様のサポートは困難です。
マリオ・ベセラ

回答:


344

group = 1ggplotまたは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では十分ではありません。この問題が発生しただけで、誰かが同じ
問題に遭遇

この回答はまだ有効ですか?審美性に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")
ジェンD.

27

変数の1つが実際には因子変数であるため、このエラーが発生します。実行する

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
この警告を防ぐための良い答えです!
ミハイ2018

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

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.グロタンディーク

この問題を理解しましたか。私はあなたと同じ問題を抱えていますが、xの値ごとに1つの値しかありません。反応を待っています。ありがとう。
Hoang Le

0

同様のプロンプトが表示されました。これは、x軸を特定のパーセンテージで指定したためです(たとえば、10%A、20%Bなど)。したがって、別の方法としては、これらの値を乗算して、最も単純な形式で書き込む方法があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.