开发者

How to add lines to a levelplot made using lattice (abline somehow not working)?

开发者 https://www.devze.com 2023-04-09 15:57 出处:网络
I want to draw horizontal and vertical lines on my level plot corresponding to x values from 74 to 76 and y values from 28 to 32.Bel开发者_C百科ow is my R code. But when I run the following,I get the

I want to draw horizontal and vertical lines on my level plot corresponding to x values from 74 to 76 and y values from 28 to 32. Bel开发者_C百科ow is my R code. But when I run the following,I get the levelplots but no lines. I also recieve no error from R. The default theme on my installation is something which maps the values to pink and cyan. I have also tried using the panel function but no luck with that as well.

levelplot(d_fire_count_nom ~ longitude + latitude | factor(day)+factor(year), 
          data = asia,
          subset = (month == 10),  aspect="iso", contour = FALSE, layout=c(1,1), 
          main="If a fire occured in a region (low confidence) in October during 2001-2008", 
          scales=list(x=list(at=seq(from=60,to=98, by=1)), 
                      y=list(at=seq(from=5,to=38,by=1)),cex=.7, alternating=3), 
          xlim=c(60, 98), ylim=c(5, 38),
          abline=list(h=74:76, v=28:32, col="grey"))


That's not how lattice graphics work. In fact, if you read ?levelplot you'll see that there is no argument to that function called abline, so I'm not sure where you got that syntax from.

You add things to lattice graphics by altering the panel function. There are many panel.* functions for doing various things, like plotting points, lines, scatterplot smoothers, etc. In this case there's a panel.abline that we'd like to use. So we define our own panel function.

This uses the very first example from ?levelplot:

x <- seq(pi/4, 5 * pi, length.out = 100)
y <- seq(pi/4, 5 * pi, length.out = 100)
r <- as.vector(sqrt(outer(x^2, y^2, "+")))
grid <- expand.grid(x=x, y=y)
grid$z <- cos(r^2) * exp(-r/(pi^3))
levelplot(z~x*y, grid,
        panel = function(...){
            panel.levelplot(...)
            panel.abline(h = 2.5)
            panel.abline(v = 2.5)
        }, 
        cuts = 50, scales=list(log="e"), xlab="",
        ylab="", main="Weird Function", sub="with log scales",
        colorkey = FALSE, region = TRUE)

Our new panel function needs to first draw the levelplot, so we have it call panel.levelplot first. Then we want to add some lines, so we add panel.abline for that purpose.

0

精彩评论

暂无评论...
验证码 换一张
取 消