❝「今天VIP群里有观众老爷询问如何绘制环状堆砌条形图」例图如下所示,既然观众老爷们有需求,那小编就来简单写篇文档进行介绍;下面来看具体案例「数据代码已经上传VIP群,请自行下载」 ❞
❝可以看到就是一张普通的堆砌条形图只不过改为了圆形展示,通过图形我们可以看到数据分为两组,并且每一个样本数值有正负之分,因此与常见的条形图绘制方法无二,只是在于构建极坐标并合理的添加文本;由于小编手里没有合适的数据因此使用R内置数据集来进行展示,下面来看具体细节 ❞
library(tidyverse)
❝由于例图有正负之分,「mtcars」数据集没有,因此我们人为构建一份数据 ❞
data1 <- mtcars %>% head(6) %>%
mutate_if(is.numeric, function(x) x+10) %>%
log10() %>% as.data.frame() %>%
rownames_to_column("type") %>%
pivot_longer(-type) %>%
mutate(type=factor(type)) %>% arrange(type)
# 添加负值
data1<- data1 %>% bind_rows(data1 %>% mutate(value=-value))
empty_bar <- 0
data1$id <- seq(1,nrow(data1))
label_data <- data1
number_of_bar <- nrow(label_data)
angle <- 90 - 360 * (label_data$id-0.5) /number_of_bar
label_data$hjust<-ifelse( angle < -90, 1, 0)
label_data$angle<-ifelse(angle < -90, angle+180, angle)
colors <-c("#FED439FF","#709AE1FF",
"#D5E4A2FF","#197EC0FF","#F05C3BFF","#46732EFF",
"#71D0F5FF","#370335FF","#075149FF","#C80813FF","#91331FFF",
"#1A9993FF","#FD8CC1FF")
ggplot(data1,aes(id,value,fill=name))+
geom_bar(stat="identity",alpha=0.8)+
scale_fill_manual(values = colors)+
labs(x=NULL,y=NULL)+
ylim(-7,10)+
coord_polar(start =0)+
theme_void()+
theme(
legend.text = element_text(color="black"),
legend.title=element_blank(),
legend.spacing.x=unit(0.2,'cm'),
legend.key=element_blank(),
legend.key.width=unit(0.3,'cm'),
legend.key.height=unit(0.3,'cm'),
legend.position=c(0.5,0.5))+
# 添加标签
geom_text(data=label_data,aes(x=id, y=value+1,label=type,hjust=hjust,color=name),
fontface="plain",size=2.5,show.legend = F,
angle= label_data$angle,inherit.aes = FALSE)+
scale_color_manual(values = colors)+
# 添加标签,若要给标签分配颜色只需要将color写进aes内给定分组映射即可
geom_text(data=label_data,aes(x=id, y=value+1,label=type,hjust=hjust),
fontface="plain",size=2.5,show.legend = F,color="black",
angle= label_data$angle,inherit.aes = FALSE)+
scale_color_manual(values = colors)+
# 添加外圈
geom_segment(aes(x=0, y=8,xend=66.5,yend =8),size=1.5,color="#3B9AB2",
arrow = arrow(length = unit(0, "npc"),type="closed"))+
geom_segment(aes(x=0, y=-0.1,xend=66.5,yend =-0.1),size=0.3,color="grey80",
arrow = arrow(length = unit(0, "npc"),type="closed"))
❝可以看到整个过程还是很简单的,喜欢的观众老爷欢迎分享转发
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有