web-dev-qa-db-ja.com

ggplot()を使用して同じプロットに複数の時系列をプロットする

私はRにかなり慣れていないため、ggplot2を使用して2つの時系列ラインを同時にプロットしようとしています(もちろん、異なる色を使用しています)。

2つのデータフレームがあります。最初の列には「Xの変化率」列と「日付」列があります。 2番目の列には「Yの変化率」列と「日付」列もあります。つまり、両方に同じ値の「日付」列があり、「変化率」列の値は異なります。

1つのプロットでggplot2を使用して、「日付」(両方に共通)に対して「変化率」列をプロットしたいと思います。

私がオンラインで見つけた例は、これを達成するために異なる変数を持つ同じデータフレームを使用しましたが、2つのデータフレームを使用してプロットに到達するものを見つけることができませんでした。 2つのデータフレームを一緒にバインドしたくありません。別々にしたいです。私が使用しているコードは次のとおりです。

ggplot(jobsAFAM, aes(x=jobsAFAM$data_date, y=jobsAFAM$Percent.Change)) + geom_line() +
  xlab("") + ylab("")

しかし、このコードは1行のみを生成するため、その上に別の行を追加したいと思います。どんな助けでも大歓迎です。 TIA。

39
Patthebug

ggplotを使用すると、複数のレイヤーを作成できます。これを利用する必要があります。

以下のプロットでは、2つのgeom_lineステートメントが各データセットにヒットし、1つのプロットに一緒にプロットされていることがわかります。他のデータセット、プロット、または軸ラベルなどのチャートの機能を追加する場合は、そのロジックを拡張できます。

library(ggplot2)

jobsAFAM1 <- data.frame(
  data_date = runif(5,1,100),
  Percent.Change = runif(5,1,100)
)

jobsAFAM2 <- data.frame(
  data_date = runif(5,1,100),
  Percent.Change = runif(5,1,100)
)

ggplot() + 
  geom_line(data = jobsAFAM1, aes(x = data_date, y = Percent.Change), color = "red") +
  geom_line(data = jobsAFAM2, aes(x = data_date, y = Percent.Change), color = "blue") +
  xlab('data_date') +
  ylab('percent.change')
88
TheComeOnMan

両方のデータフレームの列名が同じ場合、ggplot()呼び出し内に1つのデータフレームを追加し、aes() of ggplot()呼び出し内でxとyの値に名前を付ける必要があります。次に、最初の行に最初のgeom_line()を追加し、data=df2で2番目のgeom_line()呼び出しを追加します(df2は2番目のデータフレームです)。異なる色の線を使用する必要がある場合は、color=と各aes()geom_line()内のeahc線の名前を追加します。

df1<-data.frame(x=1:10,y=rnorm(10))
df2<-data.frame(x=1:10,y=rnorm(10))

ggplot(df1,aes(x,y))+geom_line(aes(color="First line"))+
  geom_line(data=df2,aes(color="Second line"))+
  labs(color="Legend text")

enter image description here

38
Didzis Elferts

ggfortifyライブラリを使用することを好みます。これは、オートプロット関数内のオブジェクトのタイプを認識し、プロットする最適なggplotメソッドを選択するggplot2ラッパーです。少なくとも、ggplot2の構文を覚える必要はありません。

library(ggfortify)
ts1 <- 1:100
ts2 <- 1:100*0.8
autoplot(ts( cbind(ts1, ts2)  , start = c(2010,5), frequency = 12 ),
         facets = FALSE)

Plot

5
Marcelo Ruas

私はこれが古いことを知っていますが、まだ関連しています。 reshape2 :: meltを利用して、データフレームをggplot2のより使いやすい構造に変更できます。

利点:

  • 任意の数の行をプロットできます
  • 異なる色の各線
  • 各行に凡例を追加します
  • ggplot/geom_lineを1回呼び出すだけで

不利益:

  • 追加パッケージ(reshape2)が必要
  • 溶解は最初はそれほど直感的ではありません

例えば:

jobsAFAM1 <- data.frame(
  data_date = seq.Date(from = as.Date('2017-01-01'),by = 'day', length.out = 100),
  Percent.Change = runif(5,1,100)
)

jobsAFAM2 <- data.frame(
  data_date = seq.Date(from = as.Date('2017-01-01'),by = 'day', length.out = 100),
  Percent.Change = runif(5,1,100)
)

jobsAFAM <- merge(jobsAFAM1, jobsAFAM2, by="data_date")

jobsAFAMMelted <- reshape2::melt(jobsAFAM, id.var='data_date')

ggplot(jobsAFAMMelted, aes(x=data_date, y=value, col=variable)) + geom_line()

enter image description here

3
Chris Njuguna

別の方法は、データフレームをバインドし、それらが表す変数のタイプを割り当てることです。これにより、完全なデータセットを 整然とした方法 で使用できます

library(ggplot2)
library(dplyr)

df1 <- data.frame(dates = 1:10,Variable = rnorm(mean = 0.5,10))
df2 <- data.frame(dates = 1:10,Variable = rnorm(mean = -0.5,10))

df3 <- df1 %>%
  mutate(Type = 'a') %>%
  bind_rows(df2 %>%
              mutate(Type = 'b'))


ggplot(df3,aes(y = Variable,x = dates,color = Type)) + 
  geom_line()
0
JLoria