[r] 同じグラフ上でggplot2を使って2つの変数を線としてプロットする



Answers

一般的なアプローチは、データを長形式(パッケージreshape2またはreshape2 melt()またはreshape2パッケージのgather()を使用melt()に変換することです。

library("reshape2")
library("ggplot2")

test_data_long <- melt(test_data, id="date")  # convert to long format

ggplot(data=test_data_long,
       aes(x=date, y=value, colour=variable)) +
       geom_line()

Question

非常に新鮮な質問ですが、このようなデータがあります:

test_data <-
  data.frame(
    var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
    var1 = 150 + c(0, cumsum(runif(49, -10, 10))),
    date = seq(as.Date("2002-01-01"), by="1 month", length.out=100)
  )

同じグラフ上に時系列var0var1両方をプロットするにはどうすればggplot2ですか? ggplot2を使ってx軸に日付をggplot2ますか? var0var1異なる色にして凡例を含めることができれば、ボーナスポイント!

私はこれが非常に簡単だと確信していますが、私はそこに例を見つけることができません。




あなたのデータを使う:

test_data <- data.frame(
var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
var1 = 150 + c(0, cumsum(runif(49, -10, 10))),
Dates = seq.Date(as.Date("2002-01-01"), by="1 month", length.out=100))

私は、 ggplot()が使いたいと思うスタックバージョンを作成します:

stacked <- with(test_data,
                data.frame(value = c(var0, var1),
                           variable = factor(rep(c("Var0","Var1"),
                                                 each = NROW(test_data))),
                           Dates = rep(Dates, 2)))

この場合、 stackedを作成するのは非常に簡単でしたが、これは2つの操作を行うだけでしたが、より複雑な実際のデータセットを操作する場合は、 reshape2 reshape()reshape2reshape2が役に立ちます。

データがこの積み重ねられた形式になったら、単純なggplot()呼び出しで必要なプロットをすべてのエクストラで作成するだけです( latticeggplot2ような上位プロットパッケージが非常に便利な理由の1つ)。

require(ggplot2)
p <- ggplot(stacked, aes(Dates, value, colour = variable))
p + geom_line()

私は軸ラベル、凡例などを整理するためにそれをあなたに残します。

HTH




Related