如何详细定制基本R图和子图?

如何详细定制基本R图和子图?,r,plot,data-visualization,R,Plot,Data Visualization,经济学论文中有这样一个数字: 我想像这样设计我的绘图——不可见的顶轴,右侧的Y轴值,顶部的轴标签水平对齐,子地块标题向左对齐,每个子地块都比宽高,因此强调沿Y轴的变化。我主要使用MATLAB,我试图摆弄它来复制类似的东西,但没有成功。然后,我联系了论文的一位作者,问他是否能说出他在情节上使用的应用程序,以及他是否能分享如何按照他们的情节设计我的情节。他回答说他没有代码,但他认为这是在R中完成的 我还没有在R中看到过这样的情节,甚至在经过数小时的网络拖网之后,我也没有发现任何生成的R——看起来甚

经济学论文中有这样一个数字:

我想像这样设计我的绘图——不可见的顶轴,右侧的Y轴值,顶部的轴标签水平对齐,子地块标题向左对齐,每个子地块都比宽高,因此强调沿Y轴的变化。我主要使用
MATLAB
,我试图摆弄它来复制类似的东西,但没有成功。然后,我联系了论文的一位作者,问他是否能说出他在情节上使用的应用程序,以及他是否能分享如何按照他们的情节设计我的情节。他回答说他没有代码,但他认为这是在
R
中完成的

我还没有在
R
中看到过这样的情节,甚至在经过数小时的网络拖网之后,我也没有发现任何生成的
R
——看起来甚至有点相似。如果您对在
R
中是否确实可以这样做有任何想法/建议,我们将不胜感激

编辑

承蒙Isabella Ghement的输入,在whuber的评论之后,我尝试在我的问题中的图中绘制一个4×2的面板。下面是它的外观:

令人遗憾的是,这与问题中的小组大不相同。假设,如果我能得到一个正确的面板,我就可以准备一个包含m×n子图的图形。这就是说,这个图只有两个我想要的元素——不可见的顶轴和左对齐的子地块标题。但它的记号在外面,X轴与两个Y轴不相交,轴标签仍然垂直打印在它们旁边。以下是生成上述情节的代码(摘自,感谢Isabella Ghement的建议):

#指定数据

x您已经停用了
yaxt
,因此也停用
xaxt
。在
轴中
可以省略带有
labels=FALSE的标签
。然后让我介绍一下
mtext
,您可以使用它独立于轴创建标签。是的,向内滴答声是用
tck=-something
完成的。为了获得相互接触的轴,我们从
0
开始,并以稍高的最大值结束,重叠应自动隐藏。添加
图例
。最后,明智的做法是使用
png
设备来获得所需的纵横比。简而言之,我想就这样了

# specify the data 
x <- c(0:10); y <- ((x^2)-20)/100; z <- (100/x-3)/100

# helper variables
t.adj <- .03
y.seq <- c(-.5, seq(0, 1.5, length.out=4))

png("ecn.plot.png", width=400, height=500)

# margins
par(mar=c(4, 4, 4, 5) + 0.1)

# plot x vs. y 
plot(x, y,type="l", pch=21, col="red", xlim=c(0, 10), ylim=c(-.42, max(y.seq)),
     yaxt="n", xaxt="n", lty=1, xlab="", ylab="", bty="n", lwd=2)
# add x vs. 1/x 
lines(x, z, type="l", pch=22, col="blue", lty=2, lwd=2)
# add y-zero line
abline(h=0, lwd=2)
# draw axes
axis(1, at=(-1:6)*2,labels=FALSE, col.axis="black", tck=t.adj, lwd=2)
mtext((0:5)*2, 1, 0, at=(0:5)*2,col.axis="black", font=2)
axis(2, at=y.seq, labels=FALSE, col.axis="red", las=2, tck=t.adj, lwd=2)
axis(4, at=y.seq, labels=FALSE, col.axis="red", las=2, tck=t.adj, lwd=2)
mtext(formatC(sort(c(0, y.seq)), digits=1, format="f"), 4, 2, 
      at=sort(c(0, y.seq)), col="black", las=2, font=2, adj=1)
mtext("pct.", 4, 0, at=max(y.seq)+.15, las=2, adj=1, font=2, cex=.9)
# add title
mtext("(a) Some Variable", padj=-2, adj=0, cex=1.2, font=2)
# add legend
legend(x[2], max(y.seq), c("Home", "Foreign"), lty=c(1, 2), 
       col=c("red", "blue"), bty="n", cex=.8)

dev.off()
#指定数据

我相信这样会很快解决这个问题,因为它没有足够的细节:没有最小的可重复的例子,甚至没有样本数据。您可以在base
R
graphics中生成此图,不需要任何包。这是一个有趣的编程问题。通过研究“愚蠢的轴示例”的R代码,您将找到一个很好的起点来回答这个问题。在本例中,如果要专门构建一种类型的面板,请确保修改plot()命令以包含选项bty=“n”(这将有助于抑制打印的上边缘)。此外,请确保修改title()命令以包含选项adj=0(这将有助于将绘图标题向左移动)。当然,我建议的示例中概述的策略将允许您一次构造一个面板。然后可以在同一图形窗口中组合所有面板。很抱歉,我无法与您共享实际的R代码-问题被搁置,这使得在此阶段无法添加答案。@Isabella推测在某个时候,此问题将迁移到SO或独立地重新发布在那里,因此请继续关注!我只是在我的问题上加了一个MWE。它的输出并没有达到我想要的程度。
# specify the data 
x <- c(0:10); y <- ((x^2)-20)/100; z <- (100/x-3)/100

# helper variables
t.adj <- .03
y.seq <- c(-.5, seq(0, 1.5, length.out=4))

png("ecn.plot.png", width=400, height=500)

# margins
par(mar=c(4, 4, 4, 5) + 0.1)

# plot x vs. y 
plot(x, y,type="l", pch=21, col="red", xlim=c(0, 10), ylim=c(-.42, max(y.seq)),
     yaxt="n", xaxt="n", lty=1, xlab="", ylab="", bty="n", lwd=2)
# add x vs. 1/x 
lines(x, z, type="l", pch=22, col="blue", lty=2, lwd=2)
# add y-zero line
abline(h=0, lwd=2)
# draw axes
axis(1, at=(-1:6)*2,labels=FALSE, col.axis="black", tck=t.adj, lwd=2)
mtext((0:5)*2, 1, 0, at=(0:5)*2,col.axis="black", font=2)
axis(2, at=y.seq, labels=FALSE, col.axis="red", las=2, tck=t.adj, lwd=2)
axis(4, at=y.seq, labels=FALSE, col.axis="red", las=2, tck=t.adj, lwd=2)
mtext(formatC(sort(c(0, y.seq)), digits=1, format="f"), 4, 2, 
      at=sort(c(0, y.seq)), col="black", las=2, font=2, adj=1)
mtext("pct.", 4, 0, at=max(y.seq)+.15, las=2, adj=1, font=2, cex=.9)
# add title
mtext("(a) Some Variable", padj=-2, adj=0, cex=1.2, font=2)
# add legend
legend(x[2], max(y.seq), c("Home", "Foreign"), lty=c(1, 2), 
       col=c("red", "blue"), bty="n", cex=.8)

dev.off()