2012-05-01 6 views
5

をggplot2する直接ラベルを追加します。これは、ここでの質問の続きです:Create non-overlapping stacked area plot with ggplot2がgeom_areaチャート

私は次のコードで作成されたggplot2面グラフを持っています。 namesのラベルをグラフの右側に揃えたい。私はdirectlabelsが働いているかもしれないと思うが、最も賢いものは何でも試してみたい。

require(ggplot2) 
require(plyr) 
require(RColorBrewer) 
require(RCurl) 
require(directlabels) 

link <- getURL("http://dl.dropbox.com/u/25609375/so_data/final.txt") 
dat <- read.csv(textConnection(link), sep=' ', header=FALSE, 
     col.names=c('count', 'name', 'episode')) 


dat <- ddply(dat, .(episode), transform, percent = count/sum(count)) 

# needed to make geom_area not freak out because of missing value 
dat2 <- rbind(dat, data.frame(count = 0, name = 'lane', 
          episode = '02-tea-leaves', percent = 0)) 

g <- ggplot(arrange(dat2,name,episode), aes(x=episode,y=percent)) + 
    geom_area(aes(fill=name, group = name), position='stack') + scale_fill_brewer() 

g1 <- g + geom_dl(method='last.points', aes(label=name)) 

enter image description here

私はブランドラベルがエリアと同じ色で、グラフの右側に整列するために取得する方法を実際に確認してくださいdirectlabelsに新しくありませんよ。

答えて

5

簡単にgeom_textを使用してラベルを追加できます。そして、因子レベルでデータフレームを注文

dd=subset(dat, episode=="06-at-the-codfish-ball") 

dd = dd[with(dd, order(name, levels(dd$name))),] 

は次にプロットするための累積パーセントをうまく:

dd$cum = cumsum(dd$percent) 
まず、あなたの最終x値を取得するには、データセットのサブセット

次に、標準geom_textコールを使用してください:

g + geom_text(data=dd, aes(x=6, y=cum, label=name)) 

ああ、あなたは、x軸ラベルがプロット上避けるために、角度にしたいことがあります。答えを

g + opts(axis.text.x=theme_text(angle=-25, hjust=0.5, size = 8)) 

グラフ

enter image description here

+0

感謝を。私はダイレクトラベルを理解する必要があります。なぜなら、このアプローチが一般的にどのように普及しているのかわからないからです。 – Idr

+0

@csgillespie、これは役に立ちました。ここで私が使用した構文(別のdf)は次のとおりです。 "+ geom_text(data = subset(df、Year ==" 2012 ")、aes(x = Year、y = cumsum(value)、label = variable)、vjust = 6 、hjust = -2、size = 4) ''で、 '' vjust''と '' hjust''のパラメータを正しく取得するのが面倒だった。私は試行錯誤で発見した '' aes() ''に '' cumsum''を渡すことができるということを強調するように言っています。右側の凡例では、画像と同じ順序で色を取得するために '' +ガイド(fill = guide_legend(reverse = TRUE)) ''を設定すると便利です。廃止予定の '' opts''を更新しますか? – PatrickT

+0

そして、データフレームの最後の要素(前述のOPの '' 06-at-the-codfish-ball''と私のコメントの '' 2012'')をキャッチするには、 '' tail() ''引数 '1'を持つ関数、例えば'' tail(df2.1 $ Year、1) '' – PatrickT

関連する問題