【发布时间】:2013-03-03 09:32:24
【问题描述】:
有没有一种简单的方法可以在“堆叠”条形图中标记单个“块”,如下所示。我希望将标签放置在每个块的顶部附近,但我最新的方法导致以某种方式将文本交换为美国和墨西哥,如下所示。
四处寻找解决方案,我只找到了必须在外部预先计算文本的 y 值的方法,除了额外的逻辑之外,这带来了控制顺序的问题积木堆积...
我还发现了这个stackoverflow question,在那里我想到了在stat_bin 中使用geom="text"(见下面的代码)
这是一个精简的代码 sn-p 用于说明我当前的方法。 我不一定要修复这个 sn-p,任何标记堆栈条形图区域的通用习语都可以!
编辑:(鉴于这个问题到目前为止得到的两个答案)
我想强调的是,我更喜欢不暗示预先计算文本的 y 位置的解决方案。
# sample data source
df.StackData <- data.frame(
QType = c("A4-1", "A4-1", "A4-1", "B3", "B3", "B3"),
Country = c("Canada", "USA", "Mexico", "Canada", "USA", "Mexico"),
NbOfCases = c(1000, 1320, 380, 400, 1000, 812),
AvgRate = c(17.2, 11.4, 44.21, 17.3, 15.3, 39.7),
Comment = c("Can", "US", "Mex", "Can", "US", "Mex")
)
和 ggplot 调用。 它产生了上面显示的图表,带有奇怪的标签交换(还有一个额外的图例,'虽然这个图例问题很容易处理;我只是在准备这个问题时注意到它)。
ggplot(data=df.StackData,
aes(x=QType, y=NbOfCases, fill=Country))+
geom_bar(stat="identity", width=1) +
stat_bin(geom="text", aes(label=paste("R coef =",
formatC(AvgRate, format="f", digits=3),
"(", Comment, ")" ),
vjust=1.5, size=3
)
)
我最初的尝试如下添加了一个 geom_text() 到图表中,但是 y 值当然是错误的(将文本相对于图表的最底部而不是单个块的底部)...
... +
geom_text(mapping=aes(x=QType, y=NbOfCases,
label=paste("R coef =",
formatC(AvgRate, format="f", digits=3),
"(", Comment, ")" ),
vjust=1.5),
size=3)
【问题讨论】:
标签: r ggplot2 label stacked-area-chart