是否有一种简单的方法可以在“堆叠”条形图中标记单个“块”,如下所示。我希望标签位于每个块的顶部附近,但我最新的方法导致以某种方式将文本交换为美国和墨西哥,如下所示。
环顾四周寻找解决方案,我只找到y
了必须在外部预先计算文本值的方法,除了额外的逻辑之外,这带来了控制块堆叠顺序的问题......
我还发现了这个stackoverflow 问题,在那里我有了在 a 中使用 a 的想法geom="text"
(stat_bin
见下面的代码)
这是一个精简的代码片段,用于说明我当前的方法。我不一定要修复这个片段,任何标记堆栈条形图区域的通用习语都可以!
编辑:(鉴于这个问题到目前为止得到的两个答案)
我想强调的是,我宁愿选择不意味着预先计算的解决方案文本的 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)