14

一連の水平方向にグループ化された棒グラフを作成する必要があります。棒グラフ機能は、プロットの余白を自動的に調整しないため、テキストが切り取られます。

  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)

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

R dotchart関数のようにプロットを自動的に右に移動するオプションが見つかりません((SASのbarchartプロシージャも自動的にマージンを調整します)。明らかに、par関数を使用して手動でマージンを調整できます。 。

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

プロットを右に移動します

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

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

プログラムでそれを行うための2つの関連するアプローチを考えることができます:1)最長のテキスト文字列の長さを計算し、それに応じて左マージンを調整します2)データのドットチャートプロットを作成し、どういうわけかマージンをキャプチャし、棒グラフで同じマージンを使用します。

それを行う簡単な方法はありますか?ありがとう!

4

1 に答える 1

13

あなたの最初のアイデアがおそらく最も適切だと思います。このようなものは問題なく動作するようで、多くのものを詰め込む必要はありません。

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))
于 2012-05-08T00:28:39.463 に答える