如何根据指定的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具有一对一的关系。
我认为这应该是一个简单的问题,但不知道如何解决这个问题。我希望这更清楚。
答案 0 :(得分:5)
编辑:只有一个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支持逻辑索引以及数字索引。