3

パッケージgridで作成したモザイク プロットを変更するために使用したいと考えています。vcd具体的には、正確に配置された線分を追加したいと考えています。最小限の例を次に示します。

library(vcd)
myDF <- expand.grid(fac1 = c('a', 'b', 'c', 'a'), fac2 = c('y', 'z'))
mosaic(fac2 ~ fac1, data = myDF, pop = FALSE)

結果は次のプロットです。

最小限のモザイク プロット

grid.segments()「fac2」ラベルの下に、プロットされたセルと同じ幅の水平セグメントを描画するために使用したいと思います。seekViewport()「fac2」ラベルを保持するビューポートに移動するために使用できれば、これは簡単です。しかし、私はできません。問題は次のとおりです。

> getNames()
> [1] "rect:fac1=a,fac2=y" "rect:fac1=a,fac2=z" "rect:fac1=b,fac2=y" "rect:fac1=b,fac2=z" 
  [5] "rect:fac1=c,fac2=y" "rect:fac1=c,fac2=z" "GRID.text.1"        "GRID.text.2"        
  [9] "GRID.text.3"        "GRID.text.4"        "GRID.text.5"        "GRID.text.6"        
 [13] "GRID.text.7" 

実行するseekViewport("cell:GRID.text.2")と、エラーメッセージが表示されます。

Error in grid.Call.graphics(L_downviewport, name$name, strict) : 
  Viewport 'cell:GRID.text.2' was not found

(「cell:」接頭辞は、vcdビューポートの命名スキームの一部です。対照的に、次のようなコマンドはseekViewport("cell:fac1=a,fac2=y")完全に機能します。)

「fac2」ラベルを保持するビューポートに移動する方法はありますか? そうでない場合、そのラベルの下に線分を正確に配置する最良の方法は何ですか?

4

1 に答える 1

2

上記のコメントで、@ user20650が必要な情報を提供しています。とりわけ、私の元の投稿のコードは、getNames()ビューポート名ではなくグロブ名を返すため、問題がありました。

線分を描く最も簡単な方法は、上記のように図を描き、次に

nn <- seekViewport("margin_top")  ## Drill down to the viewport[margin_top]
grid.segments(0, .5, 1, .5)
upViewport(nn)                    ## Return to top level viewport, here viewport[ROOT]

結果は次のプロットです。

x 軸ラベル間に線分があるモザイク プロット

于 2015-04-11T20:16:26.737 に答える