How to annotate across or between plots in multi-plot panels in R

前端 未结 4 560
耶瑟儿~
耶瑟儿~ 2020-12-18 00:33

If I have several plots in a single panel, I would like to be able to put text annotations that go across more than one plot area or that go in between plot areas. I\'m sure

相关标签:
4条回答
  • 2020-12-18 01:17

    For this example the layout function is simplest as has been already shown, but for more general cases you should also learn the grconvertX and grconvertY functions (along with setting clipping using par(xpd=. The convert functions can give you the coordinates in the current user coordinates for different coordinate systems, so for example you could center something on the page by converting 0.5 from the normalized device coordinates.

    0 讨论(0)
  • 2020-12-18 01:28

    Here is an example using Greg Snow's approach:

    par(mfrow=c(2, 2))
    replicate(4, plot(matrix(runif(20), nrow=10)))
    text(grconvertX(.5, "ndc", "user"), grconvertY(.25, "ndc", "user"), "TEST", cex=3, col="red", xpd=NA)
    text(grconvertX(.5, "ndc", "user"), grconvertY(.75, "ndc", "user"), "TEST", cex=3, col="red", xpd=NA)
    

    0 讨论(0)
  • 2020-12-18 01:30

    If you truly want finer control over these kinds of layout issues, you can use the aptly named layout.

    m <- matrix(c(1,2,3,3,4,5,6,6),ncol = 2,byrow = TRUE)
    layout(m,widths = c(0.5,0.5),heights = c(0.45,0.05,0.45,0.05))
    
    par(mar = c(2,4,4,2) + 0.1)
    hist(x1, xlab="", main="Group A")
    hist(x2, xlab="", main="Group B")
    
    par(mar = c(0,0,0,0)) 
    plot(1,1,type = "n",frame.plot = FALSE,axes = FALSE)
    u <- par("usr")
    text(1,u[4],labels = "Here",col = "red",pos = 1)
    
    par(mar = c(2,4,2,2) + 0.1)
    hist(x3, xlab="", main="")
    hist(x4, xlab="", main="")
    
    par(mar = c(0,0,0,0)) 
    plot(1,1,type = "n",frame.plot = FALSE,axes = FALSE)
    u <- par("usr")
    text(1,u[4],labels = "Here",col = "red",pos = 1)
    

    enter image description here

    0 讨论(0)
  • 2020-12-18 01:38

    You want to use mtext with outer=TRUE. For instance, mtext('Results2', side=1, line=-2, outer=TRUE) and mtext('Results1', side=3, line=-20, outer=TRUE).

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