gpt4 book ai didi

r - 在堆叠的 ggplot 条形图中标记单个条形

转载 作者:行者123 更新时间:2023-12-05 00:31:06 25 4
gpt4 key购买 nike

是否有一种简单的方法可以在“堆叠”条形图中标记单个“块”,如下所示。我希望标签位于每个块的顶部附近,但我的最新方法导致以某种方式交换美国和墨西哥的文本,如下所示。

example bar graph

四处寻找解决方案,我只找到了 y 的方法。文本的值必须在外部预先计算,除了额外的逻辑之外,还带来了控制块堆叠顺序的问题......
我也发现了这个 stackoverflow question在那里我想到了使用 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)

最佳答案

这是一个解决方案

df2 = ddply(df.StackData, .(QType), transform, 
pos = cumsum(NbOfCases) - 0.5 * NbOfCases)

ggplot(data = df2, aes(x = QType, y = NbOfCases, fill = Country)) +
geom_bar(stat = "identity") +
geom_text(aes(y = pos, label = paste("R coef =",
formatC(AvgRate, format="f", digits=3), "(", Comment, ")" ))
)

Imgur

关于r - 在堆叠的 ggplot 条形图中标记单个条形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15419360/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com