3

軸の範囲を明示的に指定せずに法線を作成したいxyplot場合、軸の範囲はどのように計算されるのでしょうか?

次のコード行は、単純な散布図を生成します。ただし、軸の範囲は正確に 1 ~ 10 の範囲ではなく、左右および上下にわずかに (約 0.5) 拡張されます。

library(lattice)
xyplot(1:10 ~ 1:10, cex = 1.5, pch = 20, col = "black", 
       xlab = "x", ylab = "y")

xyplot_axis_extension

各サイトで軸が拡張された要因を特定する方法はありますtrellis.par.getか? 上記のxyplotコマンドを実行した後、私はすでに次のことを試しました:

library(grid)
downViewport(trellis.vpname(name = "figure"))
current.panel.limits()
$xlim
[1] 0 1

$ylim
[1] 0 1

残念ながら、パネルの制限は正規化された親座標として返されるため、「実際の」制限を取得することはできません。どんな提案でも大歓迎です!

更新:
base-R を使用するplotと、データ範囲 (およびその結果として軸の制限) がデフォルトで両側で 4% 拡張されます。 を参照してください?par。しかし、この要因は「トレリス」オブジェクトには当てはまらないようです。したがって、私が探しているのは、 で実装されている「xaxs」(および「yaxs」) 引数に類似したものparです。

4

1 に答える 1

5

の軸制限は関数xyplotで計算されextend.limitsます。この関数は格子パッケージからエクスポートされていないため、表示するには、 と入力しlattice:::extend.limitsます。数値ベクトルに関しては、この関数には、対応するデータ (c(1, 10)この例では) から値の範囲が渡されます。最終的な制限は、次の式に従って計算されます。

lim + prop * d * c(-1, 1)
  • limこの場合、データの限界ですc(1, 10)
  • propですlattice.getOption("axis.padding")$numeric。デフォルトでは0.07
  • ddiff(as.numeric(lim))、この場合9

この場合の結果はc(0.37, 10.63)

興味がある場合は、からxyplotへの呼び出しスタックextend.limits

  1. xyplot
  2. xyplot.formula
  3. limits.and.aspect
  4. limitsFromLimitList
  5. extend.limits
于 2015-04-15T10:32:40.030 に答える