2

テキストサイズが同じになるように、いくつかのグラフの小さいバージョンと大きいバージョンを作成する必要があります。低レベルのグラフィカル パラメータをいじるのは避けたいと思っていますが、これまでのところ、これだけが機能しており、完全には機能していません。

これが私が今持っているものです。基本的には、小さいグラフの 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 軸のラベルが 1 桁ではなく 2 桁になったために現在よりも幅が広くなった場合、戻って新しい設定を再度作成する必要があります。恐ろしい!低レベルの詳細を手作りすることなく、これを自動的に行うにはどうすればよいですか?

ところで、最終的にはプロット ラインをアンチエイリアス処理したいと思うので、提案された解決策でそれが不可能にならない場合はありがたいです。たとえば、アンチエイリアスに cairoDevice を使用でき、ggplot を使用してサイズの問題を解決できる可能性があることをどこかで見ましたが、同時に両方を実行できるかどうかわかりませんか? png の代わりに pdf を使用すると、アンチエイリアスの必要性がなくなる可能性がありますが、Web ページに画像として表示したいので、png が必要だと思います。私が理解しているように、大きな保存と小さな表示はpng形式ではうまく機能しません。

4

0 に答える 0