2016-08-24 10 views
1

barchartにラベルを追加しようとしています。データはprop.table(xtabs())の出力であり、関数を操作するためにラップされているので、私はそれを基にプロットすることを制限しています。元のデータはR、棒グラフ上のラベルが間違った順序で表示される

など...注文した要因は、つまり、私は次の、一番下にXLをXXLを必要としていた質問を約text()機能さ:

  1. ラベルが正しい順序ではありませんが、私がしようとしました行列を転置して、いくつかは正しく、いくつかは正しくない。

  2. その他:ラベルを列に合わせることができないようです。

 
dataF <- matrix(
    c(0.0287081340, 0.2044657097, 0.6306220096, 0.1259968102, 0.0095693780, 0.0006379585, 0.0087591241, 0.1149635036, 
    0.5737226277, 0.2525547445, 0.0500000000, 0.0000000000, 0.0130584192, 0.0439862543, 0.5374570447, 0.3415807560, 
    0.0628865979, 0.0010309278, 0.0029620853, 0.0112559242, 0.2434834123, 0.4751184834, 0.2606635071, 0.0065165877, 
    0.0007883327, 0.0193141506, 0.3133622389, 0.4355538037, 0.2230981474, 0.0078833268, 0.0079646018, 0.0146017699, 
    0.2641592920, 0.4539823009, 0.2522123894, 0.0070796460, 0.0003047851, 0.0033526364, 0.0850350503, 0.4102407802, 
    0.4775982932, 0.0234684547),nrow=6,ncol=7)
dimnames(dataF) <- list(c("XXL","XL","Large","Medium","Small","X-Small"), c("1","2","3","4","5","6","7"))
xx <- barplot(dataF, col=1:nrow(dataF), xlim=c(0, ncol(dataF) + 5), width = 0.85)
legend("topright", rev(rownames(dataF)), fill = rev(1:nrow(dataF))) text(x = 1:7, y = t(dataF), label = round(t(dataF)*100), pos = 3, cex = 1, col = "black")

答えて

0
  1. XXLのy位置は0.0287/2であり、XLのように、Num1をのXXLは0.0287であり、XLは0.2044で0.0287 + 0.2044/2
  2. X-位置は1ではないれています:7。あなたが引数widthおよび/またはspaceを与えないとき、それらは0.7,1.9,3.1などです。私は、x座標を維持するように設定しない方が良いと思います。

これは私の例です。 cuttlefish44 @

### calculatiton of y-position 
library(dplyr); library(reshape2) 
d <- melt(dataF) %>% group_by(Var2) %>% mutate(pos = cumsum(value) - 0.5 * value) 

### draw 
xx <- barplot(dataF, col=1:nrow(dataF), xlim=c(0, 11)) # keep legend space by xlim (11 doesn't mean much) 
legend("topright", rev(rownames(dataF)), fill = rev(1:nrow(dataF))) 

with(subset(d, value > 0.04), # don't write small values 
    text(x = 0.7 + 1.2 * (Var2 - 1), y = pos, label = round(value * 100), cex = 1, col = "black")) 

enter image description here

+0

感謝。 1つの質問:値0.7、1.9、3.1 ...はどこから来ますか?それらはあらかじめ設定された間隔ですか? @コンスタンチン・ミングリン; –

+0

;それらは 'barplot()'引数のデフォルト値 'width = 1'と' space = 0.2'(par幅;絶対値は1 * 0.2 = 0.2)から来ます。だから最初のバーは左= 0.2、中=左+ 0.5、右=左+ 1です。次のバーの値=最初のバーの+ 1.2など。 – cuttlefish44

+0

と私は間違ったことを言ったことに気づいた。 'xlim'は関係しません。スペースを保存するために 'par(mar)'の代わりに使うことができます(私は編集しました)。 – cuttlefish44

関連する問題