如何解决在R中使用ggplot2向饼图图例添加值
我用R绘制了ggplot的饼图,绘制了7家公司(A到G)的“金额”。
数据和代码如下:
# Data
data=data.frame('Company'=(c("A","B","C","D","E","F","G")),'Amount'=c(30,20,10,5,2,1))
data=data %>% mutate(Company= factor(x = Company,levels = Company)) %>%
mutate(prop = Amount / sum(data$Amount) ) %>% mutate(ypos = cumsum(prop)- 0.5*prop )
# Pie chart
library(ggplot2)
ggplot(data,aes(x="",y=Amount,fill= Company) )+
geom_bar(width = 1,stat = "identity") + coord_polar("y",start=0,direction = -1) + theme_void() +
#geom_text(aes(label = percent(prop) ),size=3,position=position_stack(vjust=0.5)) +
labs(x = NULL,y = NULL,fill = NULL) + scale_fill_brewer(palette="Blues",direction=-1) +
geom_text(aes(label = percent(prop) ),position=position_stack(vjust=0.5))
但是,F和G的标签相互堆叠,导致我们无法正确读取值。
我想将这些标签放在图例中,以使图例显示为:A(41.1%)B(27.4%)C(13.7%)等。
解决方法
可以这样实现:
- 通过粘贴公司名称和比例添加新的列
- 将此新列映射为填充
library(ggplot2)
library(dplyr)
library(scales)
# Data
data=data.frame('Company'=(c("A","B","C","D","E","F","G")),'Amount'=c(30,20,10,5,2,1))
data=data %>% mutate(Company= factor(x = Company,levels = Company)) %>%
mutate(prop = Amount / sum(data$Amount) ) %>%
mutate(ypos = cumsum(prop)- 0.5*prop) %>%
mutate(legend_labs = paste0(Company," (",percent(prop),")"))
# Pie chart
library(ggplot2)
ggplot(data,aes(x="",y=Amount,fill= legend_labs) )+
geom_bar(width = 1,stat = "identity") +
coord_polar("y",start=0,direction = -1) +
theme_void() +
labs(x = NULL,y = NULL,fill = NULL) +
scale_fill_brewer(palette="Blues",direction=-1) +
geom_text(aes(label = percent(prop) ),size=3,position=position_stack(vjust=0.5))
,
谢谢,这可以。
我只需要将subdata $ legend_labs修改为一个因子变量,以使图例中的顺序保持不变(即,从最高金额到最低金额)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。