gpt4 book ai didi

r - ggplot2饼图标签中的意外行为

转载 作者:行者123 更新时间:2023-12-04 15:06:27 28 4
gpt4 key购买 nike

我在这里检查了其他问题,但看不到这个问题。我有标签问题。奇怪的是,除了一个标签外,所有标签的代码都可以正常工作。当我检查数据集(这确实很简单)时,一切似乎都很好(一列包含因子变量,另一列包含数值)。

这很奇怪,因为它对于具有相同结构的其他某些数据也可以正常工作。但是,我尝试/检查了所有内容,但无法解决此问题。这是问题所在:

library(ggplot2)
library(ggrepel)

df = data.frame(
status = c("Oak", "maple", "walnut", "Pine"),
value = c( 47.54, 37.70, 11.48, 3.28))

ggplot(df, aes(x = "" , y = value, fill = fct_inorder(status))) +
geom_bar(width = 1, stat = "identity") +
coord_polar(theta = "y", start = 0 ) +
scale_fill_brewer(palette = "Set3", direction = -4) +
geom_label_repel(aes(label = paste0(value, "%")), size=4, show.legend = F, nudge_x = 1) +
guides(fill = guide_legend(title = "Status")) +
theme_void()

One of the labels came up with an issue

如果我至少有建议可以尝试或解释这种奇怪的行为,那就太好了。

显然,通过新的ggplot2更新,他们解决了位置问题,但没有提供任何额外的位置数据,但是以某种方式,如果由于技术限制而无法使用它,则可能有助于解决此类问题。

最佳答案

我认为问题在于geom_bar(或更好的geom_col)默认为position = stack,而geom_text_repel没有。将geom_text_repel设置为position= "stack"会将标签放在饼图的每个部分的末尾,而不是中点。

可以预先计算位置。以下代码适用于显示的数据,但可能并不通用,因为它取决于行的顺序。

library(ggplot2)
library(ggrepel)

df = data.frame(
status = c("Oak", "maple", "walnut", "Pine"),
value = c( 47.54, 37.70, 11.48, 3.28))

df2 <- df %>%
mutate(
cs = rev(cumsum(rev(value))),
pos = value/2 + lead(cs, 1),
pos = if_else(is.na(pos), value/2, pos))

ggplot(df, aes(x = "" , y = value, fill = fct_inorder(status))) +
geom_col(width = 1) +
coord_polar(theta = "y", start = 0 ) +
scale_fill_brewer(palette = "Set3", direction = -4) +
geom_label_repel(aes(y = pos, label = paste0(value, "%")), data = df2, size=4, show.legend = F, nudge_x = 1) +
guides(fill = guide_legend(title = "Status")) +
theme_void()

关于r - ggplot2饼图标签中的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52258420/

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