我需要创建几个图形的小型和大型版本,以使文本大小相同。我想避免摆弄低级图形参数,但到目前为止,这是唯一对我有用的东西,即使这样做也没有完美。
这就是我现在所拥有的。它基本上依赖于将较小图形的cex设置为与较小图像相对于较大图像尺寸的cex,然后将较小图形中出现的所有文本的cex设置为该比率的倒数。
# actual data to be plotted
x = seq( 1, 10, 0.01 )
B = 1.0
a = 1.0
y = B*(x^((-1)*a))
# set graphical parameters
xlim = c(0,10)
ylim = c(0,5)
xlab = "Number of repetitions"
ylab = "Time in seconds"
version = "large" # or "small"
if ( version=="large" ) {
w = 800
h = 510
} else if ( version=="small" ) {
w = 266
h = 170
}
# create the actual plots
# I tried to remove unnecessary details but leave those that might matter for my question
png( paste(version,".png",sep=""), width=w, height=h )
par( las=1 )
if ( version=="large" ) {
plot( 0, 0, xlim=xlim, ylim=ylim, xlab=xlab, ylab=ylab, col=rgb(0,0,0,0) )
lines(spline(x,y, method='n', n=1000), lwd=3 )
} else if ( version=="small" ) {
par( cex=1/3, mar=c(8,8,1,1) )
plot( 0, 0, xlim=xlim, ylim=ylim, col=rgb(0,0,0,0), axes=FALSE, xlab="", ylab="", frame.plot=TRUE )
lines(spline(x,y, method='n', n=1000), lwd=2 )
axis( side=1, cex.axis=3, mgp=c(5.5,2.5,0) )
title( xlab=xlab, cex.lab=3, mgp=c(5.5,2.5,0) )
axis( side=2, cex.axis=3, mgp=c(5,2,0) )
title( ylab=ylab, cex.lab=3, mgp=c(5,2,0) )
}
dev.off()
这可以正常工作,但是我不得不花费大量时间手工编写字符扩展和边距,甚至在我完成之后,它仍然只能解决我所显示的具体示例的问题。当我改变几乎任何细节时,例如如果y轴上的标签变得比现在更宽,因为它们是2位数而不是1位,我必须返回并再次手动设置新设置。这太糟糕了!如何在不必手工制作低级细节的情况下自动实现这一目标?
顺便说一句,我最终还是希望让情节线反锯齿,所以如果提出的解决方案不能让那些不可能,我会很感激。例如。我在某个地方看到我可以使用cairoDevice进行抗锯齿,并且可能能够使用ggplot来解决我的大小问题,但不确定我是否可以同时执行这两个操作?可能会使用pdf而不是png删除antialias,但我想在网页中显示为图像,所以我想我需要png。正如我所理解的那样,保存大和小显示对于png格式效果不佳。