2012-05-08 8 views
11

一連の水平グループ化棒グラフを作成する必要があります。バープロット関数はプロットの余白を自動的に調整しないので、テキストが途切れてしまいます。水平棒グラフの余白の自動調整

graphics.off()  # close graphics windows 
    test <- matrix(c(55,65,30, 40,70,55,75,6,49,45,34,20), 
        nrow =3 , 
       ncol=4, 
       byrow=TRUE, 
       dimnames = list(c("Subgroup 1", "Subgroup 2", "Subgroup 3"), 
           c(
           "Category 1 Long text", 
           "Category 2 very Long text", 
           "Category 3 short text", 
           "Category 4 very short text" 
           ))) 
    barplot(test, 
     las=2, 
     beside = TRUE, 
     legend=T, 
     horiz=T) 

enter image description here

私は自動的にさらに右にプロットを移動するためのオプション、Rのdotchart機能は、それをしない方法を見つけることができません((SASにおける棒グラフの手順は同様に自動的に余白を調整します)。もちろん、私はいつもパー機能を使用して手動で余白を調整することができます。

par(mar=c(5.1, 13 ,4.1 ,2.1)) 

にプロットを移動します

プロットを右に移動するオプションがありますか?テキストの長さに応じて自動的に余白を調整します)。

私はプログラム的にそれを行うには2関連appproachesと考えることができます: 1)が最も長いテキスト文字列の長さを計算し、それに応じて左余白を調整 2)データのdotchartプロットを作成し、何とかマージンおよび使用をキャプチャ棒グラフで同じマージン。

もっと簡単な方法はありますか? ありがとう!

答えて

11

あなたの最初のアイデアはおそらく最も適切だと思います。このようなものはうまくいくように見え、あまり詰め込む必要はありません。

ylabels <- c( "1oooooooooooo", 
      "2", 
      "3", 
      "4" 
) 

test <- matrix(c(55,65,30, 40,70,55,75,6,49,45,34,20), 
        nrow =3 , 
       ncol=4, 
       byrow=TRUE, 
       dimnames = list(c("Subgroup 1", "Subgroup 2", "Subgroup 3"), 
           ylabels)) 

# adjust to the maximum of either the default 
# or a figure based on the maximum length 
par(mar=c(5.1, max(4.1,max(nchar(ylabels))/1.8) ,4.1 ,2.1)) 

barplot(test, 
     las=2, 
     beside = TRUE, 
     legend=T, 
     horiz=T) 

dotchartを検査した後、より一般化ソリューションも使用することがあります

linch <- max(strwidth(ylabels, "inch")+0.4, na.rm = TRUE) 
par(mai=c(1.02,linch,0.82,0.42)) 
+0

ありがとうございました!私は別のテキスト文字列であなたのコードを試して、余白がうまく動作します。どうやって1.8を思いついたのですか? –

+0

@MaxCherny - nchar:margin ratioと試行錯誤のちょっとした基本的な算術。私はそれが異なるフォントサイズ/スタイルに適応することを約束することはできませんが、あなたが見ることができるように計算はかなり簡単に調整することができます。 – thelatemail

+0

@thelatemail - 上記の解決方法では、デフォルトの1ではなくcex.lab = 2を設定すると、拡張要因を考慮に入れているのだろうかと思います。ありがとう! – Alex

関連する問題