Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add horizontal line to xy plot in lattice

Tags:

r

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
like image 556
birdy Avatar asked Mar 17 '23 12:03

birdy


2 Answers

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

like image 96
IRTFM Avatar answered Mar 19 '23 00:03

IRTFM


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)
       })
like image 35
Mamoun Benghezal Avatar answered Mar 19 '23 02:03

Mamoun Benghezal