653

y1 と y2 を同じプロットにプロットしたいと思います。

x  <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)
plot(x, y1, type = "l", col = "red")
plot(x, y2, type = "l", col = "green")

しかし、私がこのようにすると、それらは同じプロットに一緒にプロットされません。

Matlabではできますがhold on、Rでこれを行う方法を知っている人はいますか?

4

16 に答える 16

694

lines()またはpoints()既存のグラフに追加されますが、新しいウィンドウは作成されません。だからあなたはする必要があります

plot(x,y1,type="l",col="red")
lines(x,y2,col="green")
于 2010-04-01T23:33:35.003 に答える
245

par同じグラフで異なる軸を使用してプロットすることもできます。次のようなもの:

plot( x, y1, type="l", col="red" )
par(new=TRUE)
plot( x, y2, type="l", col="green" )

について詳しく読むと、par非常にR興味深いグラフを生成できるようになります。注目すべきもう1つの本は、PaulMurrelのRGraphicsです。

于 2011-02-18T21:27:43.557 に答える
134

ggplot多層プロットを構築するときは、パッケージを考慮する必要があります。アイデアは、基本的な美学を備えたグラフィック オブジェクトを作成し、それを段階的に強化することです。

ggplotスタイルでは、データを にパックする必要がありますdata.frame

# Data generation
x  <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x,1,1)
df <- data.frame(x,y1,y2)

基本的な解決策:

require(ggplot2)

ggplot(df, aes(x)) +                    # basic graphical object
  geom_line(aes(y=y1), colour="red") +  # first layer
  geom_line(aes(y=y2), colour="green")  # second layer

ここで+ operatorは、基本オブジェクトにレイヤーを追加するために使用されます。

ggplotプロットのすべての段階でグラフィカル オブジェクトにアクセスできます。たとえば、通常の段階的なセットアップは次のようになります。

g <- ggplot(df, aes(x))
g <- g + geom_line(aes(y=y1), colour="red")
g <- g + geom_line(aes(y=y2), colour="green")
g

gプロットが生成され、すべての段階で表示されます (まあ、少なくとも 1 つのレイヤーを作成した後)。プロットのさらなるエンチャントも、作成されたオブジェクトで作成されます。たとえば、軸にラベルを追加できます。

g <- g + ylab("Y") + xlab("X")
g

最終的gには次のようになります。

ここに画像の説明を入力

更新 (2013 年 11 月 8 日):

コメントで指摘されているように、ggplotの哲学は、データを長い形式で使用することを提案しています。対応するコードを確認するには、この回答を参照してください。

于 2013-01-27T23:42:19.663 に答える
54

あなたが探している答えは次のとおりだと思います:

plot(first thing to plot)
plot(second thing to plot,add=TRUE)
于 2014-06-17T18:34:45.383 に答える
37

matplot関数を使用します。

matplot(x, cbind(y1,y2),type="l",col=c("red","green"),lty=c(1,1))

y1y2が同じx点で評価される場合に使用します。Y 軸が大きい方 (y1または) に合わせてスケーリングされますが、これよりも大きくy2なるとクリップする他の回答とは異なります(ggplot ソリューションはほとんどこれで問題ありません)。y2y1

または、2 つの線の x 座標が同じでない場合は、最初のプロットで軸の範囲を設定し、次を追加します。

x1  <- seq(-2, 2, 0.05)
x2  <- seq(-3, 3, 0.05)
y1 <- pnorm(x1)
y2 <- pnorm(x2,1,1)

plot(x1,y1,ylim=range(c(y1,y2)),xlim=range(c(x1,x2)), type="l",col="red")
lines(x2,y2,col="green")

matplotこの Q が 4 年前のものであり、誰も言及していないことに驚いていx/ylimます。

于 2014-08-18T10:53:24.433 に答える
23

プロットを 2 つの列 (隣り合った 2 つのプロット) に分割する場合は、次のようにすることができます。

par(mfrow=c(1,2))

plot(x)

plot(y) 

参照リンク

于 2014-10-21T13:39:51.120 に答える
19

@redmode で説明されているように、 を使用して同じグラフィカル デバイスに 2 つの線をプロットできますggplot。その回答では、データは「ワイド」形式でした。ただし、使用ggplotする場合は、通常、データを「長い」形式のデータ フレームに保持するのが最も便利です。aes次に、 thetics 引数で異なる「グループ化変数」を使用することにより、線種や色などの線のプロパティがグループ化変数に応じて変化し、対応する凡例が表示されます。

この場合、colour線の色をデータセット内の変数のさまざまなレベルに一致させる美学を使用できます (ここでは、y1 と y2 の比較)。reshape2しかし、最初に、たとえばパッケージの関数 'melt' を使用して、データをワイド フォーマットからロング フォーマットに溶かす必要があります。データを再形成するその他の方法については、ここで説明します: Reshaping data.frame from wide format to long format

library(ggplot2)
library(reshape2)

# original data in a 'wide' format
x  <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)
df <- data.frame(x, y1, y2)

# melt the data to a long format
df2 <- melt(data = df, id.vars = "x")

# plot, using the aesthetics argument 'colour'
ggplot(data = df2, aes(x = x, y = value, colour = variable)) + geom_line()

ここに画像の説明を入力

于 2013-09-26T21:32:01.680 に答える
17

ベース グラフィックス (つまり、ラティス/グリッド グラフィックスではない) を使用している場合は、ポイント/ライン/ポリゴン関数を使用して MATLAB のホールド オン機能を模倣し、新しいプロットを開始せずにプロットに詳細を追加できます。マルチプロット レイアウトの場合、 を使用par(mfg=...)して、追加するプロットを選択できます。

于 2010-04-01T23:34:06.420 に答える
16

つまり、オーバープロットにポイントを使用できます。

plot(x1, y1,col='red')

points(x2,y2,col='blue')
于 2012-10-21T01:29:01.260 に答える
11

プロットする値を配列に保持するのではなく、行列に格納します。デフォルトでは、マトリックス全体が 1 つのデータ セットとして扱われます。ただし、行列に行があるのと同じ数の修飾子、たとえば col() をプロットに追加すると、R は各行を個別に処理する必要があることを認識します。例えば:

x = matrix( c(21,50,80,41), nrow=2 )
y = matrix( c(1,2,1,2), nrow=2 )
plot(x, y, col("red","blue")

データセットのサイズが異なる場合を除き、これは機能するはずです。

于 2012-07-02T23:25:16.113 に答える