13

印刷用の図を準備するとき、画面に表示されるよりもはるかに小さくする必要があることがよくあります。直径数cmのフィギュアも珍しくありません。標準のグラフィックス パッケージpar(cex=...)を使用すると、プロット全体を縮小して、このような小さな領域に収まり、比例して見えるようにすることができます。格子パッケージに相当するものはありますか?

基本的に、下の図を右パネルのサイズでどのようにプロットしますが、左パネルの比率を維持しますか?

ここに画像の説明を入力 ここに画像の説明を入力

この問題は時々私に発生し、通常、標準のグラフィックスを使用して図全体をあきらめて再描画する前に、狂ったように実験する必要があります (これはtrellis.par.get非常面倒です)。発見したときはゴールドを打ったと思いましたが、何もしていないようです。trellis.par.settrellis.par.set(simpleTheme(cex=...))

明確化

フォントサイズ、マージン、目盛りサイズなど、プロット内のすべてを再スケーリングしたい。たくさん。好みの縦横比に調整pdf(height=..., width=...)してから、InDesign やワード プロセッサなどの組版でサイズを変更するだけでよいことはわかっていますが、各 PDF に意図したサイズがファイルに埋め込まれていると、より適切に制御できると思います。

4

2 に答える 2

22

イントロ

格子プロットの要素のサイズをスケーリングする方法はいくつかあります。1つのオプションは、属性をとるすべてのパラメーターを変更することです。もう1つのオプションは、すべてが描画されるcexベースを変更することです。fontsize必要な解決策は、すぐにわかるように後者ですが、par.settings設定時に個々のコンポーネントに適用される相対的なスケーリングを調整したい場合があるため、引数を介してプロットの個々のコンポーネントに影響を与える方法を確認することも有益です。 fontsize

tl:dr

@Andrie'sAnswerのプロット例を使用

require(lattice)
plt <- xyplot(decrease ~ treatment, OrchardSprays, groups = rowpos,
              type = "a",
              auto.key = list(space = "right", points = FALSE, lines = TRUE))

パラメータ、コンポーネントとfontsizeのリストを設定します。これらは、他のすべてのプロット家具が生成されるこれら2つの主要なプロット要素の基本サイズを定義します。textpoints

update(plt, par.settings = list(fontsize = list(text = 8, points = 4)))

ここに画像の説明を入力してください

(150px x 200px PNGラスターデバイスでレンダリングされたもの)。

cexプロット家具の特定のアイテムに個別のパラメータを設定する

注意すべき点の1つは、格子プロットの外観が、によって返されるパラメータのストリーム全体によって制御されることです。trellis.par.get()

> thm <- trellis.par.get()
> str(thm, max = 1)
List of 35
 $ grid.pars        : list()
 $ fontsize         :List of 2
 $ background       :List of 2
 $ panel.background :List of 1
 $ clip             :List of 2
 $ add.line         :List of 4
 $ add.text         :List of 5
 $ plot.polygon     :List of 5
 $ box.dot          :List of 5
 $ box.rectangle    :List of 5
 $ box.umbrella     :List of 4
 $ dot.line         :List of 4
 $ dot.symbol       :List of 5
 $ plot.line        :List of 4
 $ plot.symbol      :List of 6
 $ reference.line   :List of 4
 $ strip.background :List of 2
 $ strip.shingle    :List of 2
 $ strip.border     :List of 4
 $ superpose.line   :List of 4
 $ superpose.symbol :List of 6
 $ superpose.polygon:List of 5
 $ regions          :List of 2
 $ shade.colors     :List of 2
 $ axis.line        :List of 4
 $ axis.text        :List of 5
 $ axis.components  :List of 4
 $ layout.heights   :List of 19
 $ layout.widths    :List of 15
 $ box.3d           :List of 4
 $ par.xlab.text    :List of 5
 $ par.ylab.text    :List of 5
 $ par.zlab.text    :List of 5
 $ par.main.text    :List of 5
 $ par.sub.text     :List of 5

その多くは、描画されるオブジェクトのサイズと注釈で使用されるテキストに影響します。適切な設定をすべて変更し、それらのみをリストとしてに渡す必要がありますpar.settings()。@Andrieのプロット例をスケーリングする例を次に示します。

CEX <- 0.5

pset <- list(superpose.symbol = list(cex = CEX),
             plot.symbol      = list(cex = CEX),
             par.sub.text     = list(cex = CEX),
             par.main.text    = list(cex = CEX),
             par.zlab.text    = list(cex = CEX),
             par.ylab.text    = list(cex = CEX),
             par.xlab.text    = list(cex = CEX),
             dot.symbol       = list(cex = CEX),
             box.dot          = list(cex = CEX),
             add.text         = list(cex = CEX),
             axis.text        = list(cex = CEX))
plt2 <- update(plt, par.settings = pset)

gridExtraパッケージを使用して、同じデバイス上に2つの格子プロットを配置すると、次のすべての効果を確認できます。

require("gridExtra")  ## loads package:grid too
grid.arrange(plt, plt2, ncol = 2)

その結果

ここに画像の説明を入力してください

これで、(ほぼ)すべてがスケーリングされました。注意すべき興味深い点の1つは、このアプローチでは、凡例の線の長さも目盛りの長さもスケーリングされていないことです。プロットのサイズに注意してください。各サブプロットの面積は同じでした。ただし、全体をはるかに小さいサイズでプロットできます。

ここに画像の説明を入力してください

これは合理的であり、ここで説明するために使用しなければならなかっpdf()たラスターよりも、ベクターベースのデバイス(たとえば)でレンダリングされた方が見栄えがします。png()2番目のプロットは、150pxx200pxのデバイス上にあります。

fontsize全体的なスケーリングを制御するためのベースの設定

fontsizeより簡単な方法があります。それは、パラメータを介してテキストとポイントの基本フォントサイズを設定することです。デフォルトは次のとおりです。

> trellis.par.get("fontsize")
$text
[1] 12

$points
[1] 8

これらはプロット上のすべてに影響するため、これらを縮小して、他のすべての設定を設定するのと同様の効果を実現できます。

update(plt, par.settings = list(fontsize = list(text = 8, points = 4)))

を生成します

ここに画像の説明を入力してください

png()これは、前の図2と同じサイズのデバイスにプロットされています。プロットがより適切にスケーリングされるように、マージンがどのように調整されているかに注目してください。したがって、以前に変更したすべての設定に影響を与えただけでなく、設定からキューを取得するプロットの他のビット(間隔や目盛りなど)にも影響を与えましたfontsize。繰り返しますが、これらをベクトルデバイスにプロットすると、より良い出力が得られます。

于 2012-10-24T11:33:33.153 に答える
4

cex=...プロット全体ではなく、凡例/キーに渡す必要があります。

これがデフォルトです:

xyplot(decrease ~ treatment, OrchardSprays, groups = rowpos,
       type = "a",
       auto.key =
         list(space = "right", points = FALSE, lines = TRUE))

ここに画像の説明を入力してください

cex=0.25キーで使用する場合の結果を比較します。

xyplot(decrease ~ treatment, OrchardSprays, groups = rowpos,
       type = "a",
       auto.key =
         list(space = "right", points = FALSE, lines = TRUE, cex=0.25))

ここに画像の説明を入力してください

于 2012-10-23T08:41:53.590 に答える