这是问题的延续:Create non-overlapping stacked area plot with ggplot2
我有一个由以下代码创建的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))
我是directlabels
的新手,并不确定如何让标签与图表的右侧对齐,并使用与区域相同的颜色。
答案 0 :(得分:6)
您可以使用简单的geom_text
添加标签。首先,将数据集子集化为最终x值:
dd=subset(dat, episode=="06-at-the-codfish-ball")
然后按因子级别对数据框进行排序:
dd = dd[with(dd, order(name, levels(dd$name))),]
然后计算出绘图的累积百分比:
dd$cum = cumsum(dd$percent)
然后只需使用标准的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))
<强>图形强>