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) 处的点标记——我手动绘制。我不知道如何在 panel.abline 中指定 y,因为 y 是一个变量,每个面板看起来都不同。

在我的实际数据中,我的 x 和 y 具有一对一的关系。

我认为这应该是一个简单的问题,但不知道如何解决这个问题。我希望这更清楚。

在此处输入图像描述

4

1 回答 1

6

编辑:只有一个值 petal.width 等于 0.5,这可以识别它并在相关的 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 回答