birdy
birdy

Reputation: 9646

How to add horizontal line to xy plot in lattice

I'm using lattice to generate a plot that looks like the image below

The code I'm using to generate the plot is:

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)))

I would like to draw a horizontal line on this graph at y-axis 0.23 with a different color. Purpose of adding the horizontal line is to show a baseline. Is this possible to do?

enter image description here

Sample data I'm using to plot is:

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

Upvotes: 4

Views: 7567

Answers (2)

IRTFM
IRTFM

Reputation: 263471

Need to read both ?xyplot section on 'scales' and ?llines:

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()

enter image description here

Upvotes: 5

Mamoun Benghezal
Mamoun Benghezal

Reputation: 5314

You can try the following code

# 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)
       })

Upvotes: 3

Related Questions