2012-03-29 20 views
2

私が現在作成しようとしているグラフは、2つの便の間に少し落ちています。積み重ねられたラベル付きボックスで構成されるヒストグラムを作成したいと思います。ggplot2の積み重ねられた箱のヒストグラム

http://farm8.staticflickr.com/7109/7026409819_1d2aaacd0a.jpg

それはこの使用ggplot2を達成することが可能である:ここでは正確の例は、ニューヨークタイムズ紙の最近の記事から取った私が話している事の並べ替え、ですか?

は、これまでのところ、私が持っているもので、やや疑問を増幅するために:私は明らかに、すべて間違ってやって

dfr <- data.frame(
name = LETTERS[1:26], 
percent = rnorm(26, mean=15) 
) 

ggplot(dfr, aes(x=percent, fill=name)) + geom_bar() + 
stat_bin(geom="text", aes(label=name)) 

を...。最終的に私が理想的に思うのは、手作業で修正されたグラフの線に沿ったもので、文字AからMまでは1つの陰影が、NからZは別のものになります。

http://farm8.staticflickr.com/7116/7026536711_4df9a1aa12.jpg

+0

? http://stackoverflow.com/questions/7364404/how-do-i-label-a-stacked-bar-chart-in-ggplot2-without-creating-a-summary-data-fr –

+0

ありがとう、ローマ。私はそれを使って質問に詳細を追加しました。 – patabongo

答えて

11

ここに行く!あなたはこれらの線に沿って何かを意味

set.seed(3421) 
# added type to mimick which candidate is supported 
dfr <- data.frame(
    name = LETTERS[1:26], 
    percent = rnorm(26, mean=15), 
    type = sample(c("A", "B"), 26, replace = TRUE) 
) 

# easier to prepare data in advance. uses two ideas 
# 1. calculate histogram bins (quite flexible) 
# 2. calculate frequencies and label positions 
dfr <- transform(dfr, perc_bin = cut(percent, 5)) 
dfr <- ddply(dfr, .(perc_bin), mutate, 
    freq = length(name), pos = cumsum(freq) - 0.5*freq) 

# start plotting. key steps are 
# 1. plot bars, filled by type and grouped by name 
# 2. plot labels using name at position pos 
# 3. get rid of grid, border, background, y axis text and lables 
ggplot(dfr, aes(x = perc_bin)) + 
    geom_bar(aes(y = freq, group = name, fill = type), colour = 'gray', 
    show_guide = F) + 
    geom_text(aes(y = pos, label = name), colour = 'white') + 
    scale_fill_manual(values = c('red', 'orange')) + 
    theme_bw() + xlab("") + ylab("") + 
    opts(panel.grid.major = theme_blank(), panel.grid.minor = theme_blank(), 
     axis.ticks = theme_blank(), panel.border = theme_blank(), 
     axis.text.y = theme_blank()) 

enter image description here

+0

これは素晴らしいです!ありがとうございました!私はデータ準備段階の第2段階を dfr < - ddply(dfr、。(perc_bin)、mutate、 freq = 1、pos = cumsum(freq) - 0.5 * freq)に変更することを発見しました。 同じ高さの積み重なった箱も与えます。 – patabongo

+0

助けになるのはうれしい! – Ramnath

関連する問題