Adding abline of different data to xyplot panels

后端 未结 2 1577
一整个雨季
一整个雨季 2021-01-21 06:18

Using lattice in R, I have plotted an xyplot using the factors option. Now I want to add a horizontal abline to every plot, however out of another dataframe. How can I get these

相关标签:
2条回答
  • 2021-01-21 06:53

    I think you have to use a custom panel function.

    library(lattice)
    
    MyData <- data.frame(
      v1 = 1:50,
      v2 = rnorm(50,20,5),
      v3 = c(rep("one", 10), rep("two", 10),  rep("three", 10), rep("four", 10), rep("five", 10)))
    
    lineData <- c(30,30,20,20,40) 
    # define custom panel plot function
    customPanel = function(x, y, lineData) {
      panel.xyplot(x, y)
      panel.abline(h = lineData[panel.number()]) # instead of using a global variable
    }
    
    xyplot(
      v1 ~ v2 | v3,
      data = MyData,
      layout = c(5, 1),
      scales = list(
        x = list(relation="free"),
        y = list(relation="same")
      ),
      panel = customPanel,
      lineData = lineData)
    
    0 讨论(0)
  • 2021-01-21 06:55

    Here's how i'd do it to make sure the values match up

    lineData <- data.frame(
      v3 = c("one","two","three","four","five"),
      height = c(30,30,20,20,40)
    )
    
    xyplot(
      v1 ~ v2 | v3,
      data = MyData,
      layout = c(5, 1),
      scales = list(
        x = list(relation="free"),
        y = list(relation="same")
      ),
      panel = function(x, ...) {
          level <- dimnames(trellis.last.object())[["v3"]][packet.number()]
          panel.xyplot(x, ...);
          panel.abline(h = lineData$height[lineData$v3==level])
      }
    )
    

    This produces

    0 讨论(0)
提交回复
热议问题