r - 饼图 - 如何在正确的位置获取百分比文本?
问题描述
我在饼图的正确位置显示百分比信息时遇到问题。有人可以非常友好地帮助我吗?非常感谢!
#sample dataframe
d <- data.frame(facet=c('a','b','c', "d"), value=c('0.46','0.11','0.18', "0.25"))
d$value <- as.numeric(as.character(d$value))
blank_theme <- theme_minimal()+
theme(
axis.title.x = element_blank(),
axis.title.y = element_blank(),
panel.border = element_blank(),
panel.grid=element_blank(),
axis.ticks = element_blank(),
plot.title=element_text(size=14, face="bold")
)
d$perc <- round(d$value/sum(d$value) * 100,0)
d$pos <- cumsum(d$perc) - sapply(d$perc,function(x) cumsum(x)-0.5*x)
bp <- ggplot(data=d, aes(x="", y=perc, fill=facet))+
geom_bar(width = 1, stat = "identity") +
geom_text(aes(x="", y=pos, label=paste0(perc,"%"))) +
#geom_text(aes(x="", y=value/4+ c(0, cumsum(value)[-length(value)]), label=percent(value/100)))
scale_fill_manual(values = c("a" = "#b2df8a", "b" = "#238b45", "c" = "#636363", "d"="orange"))
bp
pie <- bp + coord_polar("y", start=0) + blank_theme +
theme(axis.text.x=element_blank())
pie
解决方案
这很容易通过ggpiestats
函数来实现。它只需要对您的数据框进行轻微修改-
library(ggstatsplot)
set.seed(123)
# data
d <-
data.frame(
facet = c('a', 'b', 'c', "d"),
value = c(46, 11, 18, 25)
)
# plot with statistical details in the subtitle
ggstatsplot::ggpiestats(data = d,
main = facet,
counts = value)
如果您不想要统计测试细节并想进一步自定义绘图的美感,您还可以使用ggplot2
函数-
# customizing it further
# change the slice label
ggstatsplot::ggpiestats(data = d,
main = facet,
counts = value,
slice.label = "both",
package = "wesanderson",
palette = "Royal2") +
ggplot2::labs(subtitle = NULL)
由reprex 包(v0.2.1)于 2019 年 2 月 9 日创建
推荐阅读
- reactjs - 无法在 React 中使用本地存储中的令牌
- javascript - 需要帮助验证 JavaScript 中的 PASETO 令牌的有效性。目前有依赖于有效载荷的不稳定行为
- c++ - 在 C++ 中通过迭代器将向量写入二进制文件的正确方法
- python - 所有值都进入 Django 表中的一列。怎么分开?
- laravel - 如何在 Laravel 中一次延迟加载所有集合的关系
- python - 通过将两列与不同 DataFrame 中的两个相似列进行比较,向 Pandas DataFrame 添加新列
- git - Flutter:获取最新的提交 sha
- image-processing - 在进行8位平面切片时,16的灰度值会落在平面数中吗?
- python - 数据框添加行没有正确返回
- c# - 获取项目库中的类列表 (C#)