339

非常に初歩的な質問ですが、次のようなデータがあるとします。

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)
  )

var0を使用して、時系列とvar1同じグラフの両方dateを x 軸にプロットするにはどうすればよいggplot2ですか? 色違いで作るvar0とボーナスポイント、レジェンドを入れることができます!var1

これは非常に単純だと思いますが、例が見つかりません。

4

5 に答える 5

412

少数の変数については、自分で手動でプロットを作成できます。

ggplot(test_data, aes(date)) + 
  geom_line(aes(y = var0, colour = "var0")) + 
  geom_line(aes(y = var1, colour = "var1"))
于 2010-09-23T16:12:22.233 に答える
395

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

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()

ggplot2 出力

ワイドからロングへのデータの再形成に関するこの質問も参照してください。

于 2010-09-23T10:55:20.143 に答える
38

ggplot2 では、データを「ワイド」ではなく「トール」形式にする必要があります。「ワイド」とは、各変数を異なる列として行ごとに観察することを意味します(現在のように)。変数の名前を示す列と、変数の値を示す別の列がある「tall」形式に変換する必要があります。ワイドからトールに移行するプロセスは、通常「溶ける」と呼ばれます。tidyr::gatherデータフレームを溶かすために使用できます:

library(ggplot2)
library(tidyr)

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)
  )
test_data %>%
    gather(key,value, var0, var1) %>%
    ggplot(aes(x=date, y=value, colour=key)) +
    geom_line()

複数のシリーズggplot2

明確にするために、パイプを介して消費しdataているは次のようになります。ggplotgather

date        key     value
2002-01-01  var0    100.00000
2002-02-01  var0    115.16388 
...
2007-11-01  var1    114.86302
2007-12-01  var1    119.30996
于 2016-09-20T09:21:47.797 に答える
12

データの使用:

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、いくつかの操作を行うだけでよいため、作成は非常に簡単でしたが、より複雑な実際のデータ セットを操作する場合reshape()は、reshapeandreshape2が役立つ場合があります。

データがこのように積み上げられた形式になったら、単純な呼び出しだけで必要なすべての追加機能を備えたプロットを作成できます (高レベルのプロット パッケージが好まれ、非常に便利でggplot()ある理由の 1 つです)。latticeggplot2

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

軸ラベル、凡例タイトルなどの整理はお任せします。

HTH

于 2010-09-23T10:53:24.767 に答える