3

複数のパネルを持つ格子棒グラフのバーにラベルを追加しようとしています。ラベルが多すぎます (すべてのラベルがすべてのパネルにあります)。

これが私のコードです:

library(lattice)
data(iris)

barchart(seq(1,50) ~ Petal.Width + Petal.Length | Species, data = iris, stack = TRUE,
         panel=function(x, y, ...) {
               panel.barchart(x, y, ...);
               ltext(x=iris$Petal.Width/2, y=y, labels=iris$Petal.Width, cex = 0.5);
               ltext(x=iris$Petal.Width + iris$Petal.Length/2, y=y, labels=iris$Petal.Width, cex = 0.5);
         }
)

どうすればこれを正しく行うことができますか?

おまけの質問:
期待どおりに動作しないことに加えて、私のコードはあまり効率的ではないと思います (特にseq(1,50)and Petal.Width + Petal.Length)。より良い方法はありますか?

前もって感謝します!!!

4

1 に答える 1

8

ここでの根本的な問題は、積み上げ棒グラフにラベルを追加する方法latticeです。回答はこの質問で提供されていますが、リンクされた回答には複数のパネルがないため、ここでベース R を使用してより簡単な回答を再作成します。

パネル関数を次のように変更する必要があります。

  • 各 y 値の x 値の累積合計を計算します
  • これは、古典的な分割、適用、結合の問題です。plyrこれには(リンクされた回答のように)、または私が説明するように、split次のように使用できますdo.call

xx <- do.call(c, unname(lapply(split(x, y), function(t)cumsum(t)-t/2)))

コード:

barchart( 1:10 ~ Petal.Width + Petal.Length | Species, 
          data = iris[c(1:10, 51:60, 101:110), ], 
          stack = TRUE,
          panel=function(x, y, ...) {
            panel.barchart(x, y, ...)
            xx <- do.call(c, unname(lapply(split(x, y), function(t)cumsum(t)-t/2)))
            ltext(xx, y=y, labels=x)
         }
)

ここに画像の説明を入力

于 2011-11-02T11:13:36.667 に答える