4

指定された x 値に基づいて、各グラフに水平線を描画するにはどうすればよいですか? たとえば、x 軸に X=1 がある場合、プロット上の一致するドットは (1,y0) であり、その結果、水平線 Y=y0? を描画します。

x=0.5 で垂直線のみを持つ虹彩データを使用した実際の例:

iris = read.table("http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data", sep=',', header=F)
names(iris) = c("sepal.length", "sepal.width", "petal.length", "petal.width", "iris.type")


xyplot(sepal.length ~ petal.width | iris.type, data = iris,
    panel = function(...) {
        panel.abline(v=0.5, lty = "dotted", col = "black")
        panel.xyplot(...)
})

しかし、この方法で水平線を表示したい:iris-setosaグラフ (パネル) を参照してください。(0.5,y) の点を通る水平線がマークされています。これを手動で描画します。y はパネルごとに異なるように見える変数なので、panel.abline で y を指定する方法がわかりません。

私の実際のデータでは、x と y は 1 対 1 の関係にあります。

簡単な問題だと思ったのですが、これを回避する方法がわかりません。これがより明確になることを願っています。

ここに画像の説明を入力

4

1 に答える 1

6

編集: 0.5 に等しい petal.width 値は 1 つだけあり、これはそれを識別し、関連付けられた sepal.length 値で水平線を描画します。

xyplot(sepal.length ~ petal.width | iris.type, data = iris,
    panel = function( x,y,...) {
        panel.abline( h=y[ which(x==0.5) ], lty = "dotted", col = "black")
        panel.xyplot( x,y,...)
})

複数のパネルで複数の一致も処理することを確認するためにテストしました。複数の値をテストする場合は、次のようになります。

... (h=y[ which(x %in% values) ] , ...

which私がそうしなければ、R は数値インデックスと同様に論理インデックスもサポートしているので、誰かが来て、 が必要ないことを指摘するでしょう。

于 2013-07-11T20:03:21.103 に答える