R 如何向晶格中的xy绘图添加水平线

R 如何向晶格中的xy绘图添加水平线,r,lattice,R,Lattice,我正在使用lattice生成一个类似下图的绘图 我用来生成绘图的代码是: xyplot(RMSE ~ Dimensions, data=afterdim,groups = paste("", Dim_Reduction), type = "l", auto.key =list(spline = "bottom", points = FALSE, lines = TRUE), xlab="Dimensions", ylab="RMSE",scales=list(ylim=c(0,1))) 我想

我正在使用lattice生成一个类似下图的绘图

我用来生成绘图的代码是:

xyplot(RMSE ~ Dimensions, data=afterdim,groups = paste("", Dim_Reduction),
type = "l", auto.key =list(spline = "bottom", points = FALSE, lines = TRUE), 
xlab="Dimensions", ylab="RMSE",scales=list(ylim=c(0,1)))
我想在这张图上用不同的颜色在y轴0.23处画一条水平线。添加水平线的目的是显示基线。这可能吗

我用来绘图的样本数据是:

Dim_Reduction, Dimensions, Time, RMSE
PCA, 9, 15.39, 0.287
PCA, 8, 16.84, 0.290
PCA, 7, 14.13, 0.289
PCA, 6, 12.14, 0.292
PCA, 5, 12.54, 0.293
PCA, 4, 11.23, 0.295
ICA, 11, 20.23, 0.287
ICA, 10, 20.88, 0.288
ICA, 9, 16.34, 0.290
ICA, 8, 16.99, 0.294
ICA, 7, 14.34, 0.291
ICA, 6, 13.33, 0.292
ICA, 5, 12.12, 0.294

您可以尝试以下代码

# data
afterdim <- read.table(header = TRUE, text = "
Dim_Reduction  Dimensions  Time RMSE
PCA, 9, 15.39, 0.287
PCA, 8, 16.84, 0.290
PCA, 7, 14.13, 0.289
PCA, 6, 12.14, 0.292
PCA, 5, 12.54, 0.293
PCA, 4, 11.23, 0.295
ICA, 11, 20.23, 0.287
ICA, 10, 20.88, 0.288
ICA, 9, 16.34, 0.290
ICA, 8, 16.99, 0.294
ICA, 7, 14.34, 0.291
ICA, 6, 13.33, 0.292
ICA, 5, 12.12, 0.294")

xyplot(RMSE ~ Dimensions, data=afterdim,groups =  Dim_Reduction,
       type = c("l", "g"), auto.key =list(spline = "bottom", points = FALSE, lines = TRUE), 
       xlab="Dimensions", ylab="RMSE",scales=list(ylim=c(0,1)),
       panel=function(...) {
           panel.xyplot(...)
           panel.abline(h=.29)
       })
#数据

afterdim需要阅读“刻度”上的xyplot部分和直线:

mylattice <- xyplot(RMSE ~ Dimensions, data=afterdim, groups = Dim_Reduction,
            panel =function(x,y,groups,...){ 
                           panel.xyplot(x,y,groups,...);
                           panel.lines(x=3:12, y=rep(0.23,10), col="red") },
             scales=list( y=list( limits= c(0.22,0.3))),
             type = "l", xlab="Dimensions", ylab="RMSE")
 png(); print(mylattice); dev.off()

mylattice可能是伟大的复制品,这很有效。但是,当我把它放在0.23时,这条线没有显示出来,因为Y轴没有覆盖它。有没有办法移动y轴使点显示出来?您可以使用@BondedDust的解决方案与
scales=list(y=list(limits=c(0.22,0.3))
或将其替换为
ylim=c(0.22,0.3)