【问题标题】:Plot text block outside of a plot in R在 R 中的绘图之外绘制文本块
【发布时间】:2016-10-26 20:19:57
【问题描述】:

我想在绘图旁边放一个较长的文本,但格式有问题。这是实际情节的代码:

percentile.plot <- function(value = 3, rev = FALSE,
                        col.fade = c("snow2","snow1", "snow"),
                        box.lwd = 3, box.col="snow4", point.col= "black"){
 x <-c(1:5)
 y <- rep(1, 5)
 colfunc <- colorRampPalette(col.fade)
 if(rev){colors <- rev(colfunc(2000))} else { colors <- colfunc(2000) }
 segm <- seq(0, 5, by = 0.005)

par(mar = c(0, 10, 0, 10))
plot(x, y, type = "n", bty="n", axes=F, ylab="", xlab="", 
   xlim=c(0,5), ylim=c(0,1), asp=1,
   xaxs ="i", yaxs = "i")
 segments(x0 = segm, y0 = 0, y1=1, x1 = segm, col= colors, lty=1.2)

segments(x0 = c(0:5), y0 = 0, y1=1, x1 = c(0:5), col= box.col, lwd=box.lwd)
segments(x0 = 0, y0 = c(0:1), y1=c(0:1), x1 = 5, col= box.col, lwd=box.lwd)

if (value >= .99) {value <- .99}
if (value < .01) {value <- .01}
value.trans <- value*5
points(x = value.trans, y = 0.5, pch=4, lwd=3, cex=1.3, col=point.col)

}

percentile.plot(0.9)

现在我想在绘图的左右放置文本块,如下所示:

text_left <- "I would like to put a text next to my graph \n
            but unfortunately I cannot get the formatting \n
            right. Either my margins are to big to knit my \n
            plot into an html or the text is not aligned \n
            as I want it to be. I am sure there is an easy \n
            solution but I haven’t found one yet." 

text_right <- "I would like to put a text next to my graph \n
            but unfortunately I cannot get the formatting \n
            right. Either my margins are to big to knit my \n
            plot into an html or the text is not aligned \n
            as I want it to be. I am sure there is an easy \n
            solution but I haven’t found one yet." 

我尝试了以下方法:

par(lheight = 0.5)
mtext(text_left, las = 1, side = 2, outer = TRUE, adj = 0, line= 5, cex = .8) 
mtext(text_right, las = 1, side = 4, outer = TRUE, adj = 0, line= -8, cex = .8) 

结果:

plot

我想要的是绘图左侧的一个文本块,它在左侧对齐,另一个在绘图右侧,也与左侧对齐。这些文本应该是对我计算的图的每一端的描述。

此外,我在不同的计算机(13 英寸和 27 英寸)上进行了尝试,并且必须更改边距大小才能获得相同的结果。有没有更好的方法将文本添加到情节?加上实际的情节应该比图片中的要大,但我无法正确地做到这一点。

【问题讨论】:

  • 如果您希望每个文本块的大小与绘图相当,我建议使用 layoutpar(mfrow(c(1, 3)) 并为每个文本和您的绘图使用不同的绘图区域
  • 同意。您可能想删除函数中的par 并尝试类似library(gplots);par(mar = rep(0,4));layout(matrix(c(1,1,2,3,3), nrow = 1));textplot(text_left, "right", "center");percentile.plot(0.9);textplot(text_left, "left", "center")

标签: r text plot alignment


【解决方案1】:

使用网格图形可能更容易

percentileGrob <- function(value = 3, ...){
  x <-c(1:5)
  y <- rep(1, 5)
  g1 <- rasterGrob(t(colorRampPalette(blues9)(100)), width=unit(1,"npc"), height=unit(1,"npc"))
  h <- 1/5
  g2 <- rectGrob(x=seq(h/2, 1-h/2, by=h), width=h, gp=gpar(fill=NA))
  g3 <- pointsGrob(seq(h/2, 1-h/2, by=h)[5],0.5, pch=4, gp=gpar(lwd=4))
  grobTree(g1, g2, g3,vp=viewport(width=unit(1,"snpc"), height=unit(1/5,"snpc")))
}

text_left <- "I would like to put a text next to my graph but unfortunately I cannot get the formatting right. Either my margins are to big to knit my plot into an html or the text is not aligned as I want it to be. I am sure there is an easy solution but I haven’t found one yet." 

library(gridExtra)

tl <- textGrob(paste(strwrap(text_left, 50), collapse="\n"), hjust=0, x=0)
tr <- textGrob(paste(strwrap(text_left, 50), collapse="\n"), hjust=0, x=0)
grid.arrange(tl, percentileGrob(), tr, widths=unit.c(grobWidth(tl), unit(1,"npc") - grobWidth(tl) - grobWidth(tr), grobWidth(tr)))

【讨论】:

    猜你喜欢
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 2015-11-10
    相关资源
    最近更新 更多