我想在一个情节旁边放一个较长的文字,但我的格式有问题。这是实际情节的代码:
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)
结果是:
我想要的是图表左侧的文本块,它在图的左侧对齐,另一个在图的右侧对齐,也在左侧对齐。这些文本应该是我计算的图的每一端的描述。
此外,我在不同的计算机(13&#39;&#39;和27&#39;&#39;)上尝试了此操作,并且必须更改边距大小才能获得相同的结果。有没有更好的方法来添加文字到剧情?此外,实际情节应该比图片中的情节大,但我无法做到这一点。
答案 0 :(得分: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)))