【发布时间】: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)
结果:
我想要的是绘图左侧的一个文本块,它在左侧对齐,另一个在绘图右侧,也与左侧对齐。这些文本应该是对我计算的图的每一端的描述。
此外,我在不同的计算机(13 英寸和 27 英寸)上进行了尝试,并且必须更改边距大小才能获得相同的结果。有没有更好的方法将文本添加到情节?加上实际的情节应该比图片中的要大,但我无法正确地做到这一点。
【问题讨论】:
-
如果您希望每个文本块的大小与绘图相当,我建议使用
layout或par(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")。