2017-01-02 15 views
6

同じ画像に複数のプロットを入れたいのですが、画像に応じてプロット数を変えたいと思います。正確には、まず1x2のプロット行列を作成し、次に3x2のプロット行列を作成します。私はこれらの2つの画像について同じ基本設定を使用したいと思います - これは紙のためのもので、プロットのフォントサイズは少なくとも6ポイントでなければならないので、特に同じフォントサイズです。Rのフォント、プロットオブジェクトなどのサイズ変更を防止するにはどうすればよいですか?

これを達成するために、私はRのために以下のコードを書いた:

filename = "test.png" 
font.pt = 6 # font size in pts (1/72 inches) 
total.w = 3 # total width in inches 
plot.ar = 4/3 # aspect ratio for single plot 
mat.col = 2 # number of columns 
mat.row = 1 # number of rows 
dpi = 300 

plot.mar = c(3, 3, 1, 2) + 0.1 
plot.mgp = c(2, 1, 0) 
plot.w = total.w/mat.col - 0.2 * plot.mar[2] - 0.2 * plot.mar[4] 
plot.h = plot.w/plot.ar 
total.h = (plot.h + 0.2 * plot.mar[1] + 0.2 * plot.mar[3]) * mat.row 

png(filename, width = total.w, height = total.h, res = dpi * 12/font.pt, units = "in") 

par(mfrow = c(mat.row, mat.col), mai = 0.2 * plot.mar, mgp = plot.mgp) 

plot(1, 1, axes = T, typ = 'p', pch = 20, xlab = "Y Test", ylab = "X Test") 

dev.off() 

あなたが見ることができるように、私は3インチの幅の合計を設定し、私のイメージのための全体の高さを計算し、そのようプロットのアスペクト比は正しい。フォントサイズは、解像度だけを係数で変更します。 とにかく、mat.row = 1からmat.row = 3に移動すると、フォントサイズが大きく変わるという問題がありました。他のものも変更されています。たとえば、軸と余白のラベル付けは、以前はインチで指定していましたが、変更しました。

3行が設定されている

(トリミングされた画像):1行のみが設定されている

3 rows

(トリミングされた画像):見てい

1 row

をどのように私がすることができますこれを防ぐ?私が見る限り、私はできる限りのことをしました。これはかなり時間がかかったので、gglplotに切り替えるのではなく、最初からすべてを学ぶ代わりに、これを動作させたいと思います。それはまた私が本当に非常に明白な何かを欠いていることを本当に望むほど十分に小さいです。

我々は見つけることができます ?par
+0

多分あなたは ''パー(PS = font.pt)したいですか? – Nate

+0

[このSOの質問/回答](http://stackoverflow.com/questions/30467015/why-does-r-re-size-everything-in-the-plot-but-not-the-text-when-exported )役に立つかもしれません。 – eipi10

+0

eipi10:たぶん私はこれを誤解しているかもしれませんが、その答えの人が知っていることは、幅と高さを変更すると要素が同じサイズに留まることです。私はそれを知っています、それは具体的に私がここで使用しようとしているものです。私の問題は、これが私の具体的な例でどのように動作するかではないということです。 – Fearabbit

答えて

4

:丁度2行と列のレイアウトで

を「CEX」 の基本値は0.83倍に縮小されています。どちらか の3以上が存在する場合行または列の場合、縮小係数は0.66です。

したがって、もしからmfrow値(2,1)(2,3)に0.83 0.66からcex値の変更を変更したとき。 cexは、フォントサイズとテキスト行の高さに影響します。

したがって、プロットの値を手動でcexと指定できます。

par(mfrow = c(mat.row, mat.col), mai = 0.2 * plot.mar, mgp = plot.mgp, cex = 1) 

希望、必要なものです。 mat.row = 1ため

プロット(切り取られた): mat.row = 1 (cropped) そしてmat.row = 3ためのプロット(切り取られた): mat.row = 3 (cropped)

+1

ありがとう!これらの要素は、異なる行や列を試しながら経験的に見つけたものです。それは私にナッツを運転していたが、それはそれを説明する。私の防衛の中で、私は具体的にcex値を変更することを避けました。その理由は、説明が隠されているとは思わなかったからです。 – Fearabbit

関連する問題