经济学论文中有这个数字:
我想像这样对图进行样式设置-顶部轴不可见,右侧Y轴值,顶部轴标签并水平对齐,子图标题向左对齐,每个子图更高比宽,因此强调沿Y轴的变化。我主要使用MATLAB
,并且尝试弄弄它来重现这样的内容,但徒劳无功。然后,我与该论文的一位作者联系,询问他是否可以告诉他用于情节的应用程序,以及是否可以分享在情节之后对我的情节进行样式设置的方法。他回答说他没有代码,但他认为它是在R
中完成的。
我还没有见过在R
中完成过这样的情节,即使经过数小时的互联网拖曳,我也没有发现R
生成的任何东西看起来都非常相似。如果您对是否确实可以在R
中进行操作有任何想法/建议,将不胜感激。
编辑
由Isabella Ghement提供意见,并在whuber发表评论后,我尝试在问题图中绘制4 x 2面板之一。这是它的外观:
按理,这与问题面板有很大不同。大概,如果我可以正确地找到一个面板,则可以准备一个包含m x n个子图的图形。就是说,这个图只有我想要的两个元素-不可见的上轴和向左对齐的子图标题。但是它的刻度线在外面,X轴与两个Y轴不对齐,并且轴标签仍然垂直打印在它们的旁边。这是产生以上情节的代码(摘自https://www.statmethods.net/advgraphs/axes.html,感谢Isabella Ghement的建议)
# specify the data
x <- c(1:10); y <- x; z <- 10/x
# create extra margin room on the right for an axis
par(mar=c(5, 4, 4, 8) + 0.1)
# plot x vs. y
plot(x, y,type="b", pch=21, col="red",
yaxt="n", lty=3, xlab="", ylab="", bty="n")
# add x vs. 1/x
lines(x, z, type="b", pch=22, col="blue", lty=2)
# draw an axis on the left
axis(2, at=x,labels=x, col.axis="red", las=2)
# draw an axis on the right, with smaller text and ticks
axis(4, at=z,labels=round(z,digits=2),
col.axis="blue", las=2, cex.axis=0.7)
# add a title for the right axis
mtext("y=1/x", side=4, line=3, cex.lab=1,las=2, col="blue")
# add a main title and bottom and left axis labels
title("(a) Some Variable", xlab="X values",
ylab="Y=X", adj=0)
我希望能够生成这种图的简单方法,但是似乎很多手工工作。
进一步编辑
尽管其中一位作者回信说他认为在R
中完成了图,但是我确实怀疑@iayork这样的图可能没有在R
中完成。我看了另一篇论文的在线附录,其中该问题的一位论文作者是该论文的合著者,并且该论文也具有相似风格的情节。看看这个情节例如:
当我查看该图的文件属性(这是一个PDF文件,该文件在压缩文件夹中包含在线附录,但不包含代码)时,我看到了:
看到这一点后,我立即认为它是由S-PLUS
生成的,但是花了数小时后,我没有在S-PLUS
网站上找到任何在线内容,也没有发现任何其他相似之处。那时我以为,即使通过查看文件属性看起来也不是那样。然后,作为最后的选择,我试图与作者联系,但仍无济于事。
答案 0 :(得分:1)
您已经停用了yaxt
,因此也停用了xaxt
。在axis
中,我们可以省略labels=FALSE
的标签。然后让我介绍一下mtext
,您可以使用它独立于轴创建标签。是的,向内滴答声是用tck=-something
完成的。为了使轴彼此接触,我们从0
开始,直到最大值稍高一些为止,应该自动隐藏重叠部分。添加legend
。最后,使用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()
啊,要安排多个图,您可能要看一下this answer。