私は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。
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')
両方のデータフレームの列名が同じ場合、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")
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)
私はこれが古いことを知っていますが、まだ関連しています。 reshape2 :: meltを利用して、データフレームをggplot2のより使いやすい構造に変更できます。
利点:
不利益:
例えば:
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()
別の方法は、データフレームをバインドし、それらが表す変数のタイプを割り当てることです。これにより、完全なデータセットを 整然とした方法 で使用できます
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()