我试图做一些非传统的情节标签和想办法的转换line参数mtext和axis用户的坐标.
换句话说,我想将值转换par()$mgp为用户坐标.
这说明了问题:
setup_plot <- function() {
par(mar = c(2, 10, 2, 2), oma = rep(2, 4))
plot.new()
plot.window(xlim = c(0, 1), ylim = c(0, 1))
box(which = "plot", lwd = 2, col = "gray40")
box(which = "figure", lwd = 2, col = "darkred")
box(which = "outer", lwd = 2, col = "darkgreen")
text(x = 0.5, y = 0.5,
labels = "Plot Region",
col = "gray40", font = 2)
mtext(side = 3, …Run Code Online (Sandbox Code Playgroud) 由于数据的隐私性,我使用mtcar数据集ggplot2来解释我的问题.
有四个图:
g1 <- ggplot(mtcars,aes(mpg,wt)) + geom_point()
g2 <- ggplot(mtcars,aes(mpg,disp)) + geom_point()
g3 <- ggplot(mtcars,aes(mpg,drat)) + geom_point()
g4 <- ggplot(mtcars,aes(mpg,qsec)) + geom_point()
Run Code Online (Sandbox Code Playgroud)
我想把这四个图放在一个图中,所以我grid.arrange()在包中使用函数grid.Extra:
grid.arrange(g1,g2,g3,g4,ncol=2)
Run Code Online (Sandbox Code Playgroud)
现在,我想在这些图中的每个图下面添加标题,如下图所示(我在Word中修改它,所以它不漂亮)
在询问之前,我已经搜索过SO,并且我知道如何在一个绘图下添加标题,例如,使用grid.text()或这三种方法 在ggplot2生成的绘图下方显示文本,或者element_text(vjust=-10)我不能将其应用于一个图中的四个绘图.同时,我在基础图中得到了一些结果如何为R中的每个图添加标题?或者使用par(mfrow)编译的数字面板的公共主标题,qustion是我想要进行ggplot2并且标题在每个情节下面,我该如何实现它?谢谢!
为了在科学出版物中使用,我想在一个用par(mfrow = c(3,1))生成的图中的三个图中添加一个键(A,B,C)作为"标题".为单个绘图添加一个漂亮的"标题"键的一个非常简单的解决方案是使用title()的'outer'参数(例如title(outer=T,adj=0,main="A",cex=1.1, col="black",font=2,line=-1)),但是当这将用于多个绘图时,所有标题最终都在同一个地方:
par(mfrow=c(3,1))
plot(rnorm(100),col="red")
title(outer=T,adj=0,main="A",cex=1.1,col="black",font=2,line=-1)
plot(rnorm(100),col="blue")
title(outer=T,adj=0,main="B",cex=1.1,col="black",font=2,line=-1)
plot(rnorm(100),col="green")
title(outer=T,adj=0,main="C",cex=1.1,col="black",font=2,line=-1)
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用布局和/或mtext(使用par(mfrow)编译的图形面板的公共主标题)但是我觉得可能有一个更容易的解决方案,我正在忽略(我没有访问Adobe Illustrator,并且会喜欢用R来完全生成图表.我可以通过使用布局得到的解决方案不够好(键与绘图分离得太多而左边不够),同时我发现边缘和坐标的游戏有点过于繁琐.
par(mar=c(1,2,2,1))
layout(matrix(seq(1,6),ncol=1),heights=rep(c(1,3),3))
plot.new()
text(0,0.5,"A",cex=1.1,font=2)
plot(rnorm(100),col="red")
plot.new()
text(0,0.5,"B",cex=1.1,font=2)
plot(rnorm(100),col="blue")
plot.new()
text(0,0.5,"C",cex=1.1,font=2)
plot(rnorm(100),col="blue")
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激.即使答案是简单地说这是不可能的,这仍然会非常有帮助.