大数跨境
0
0

ggplot2为地图添加3D饼图

ggplot2为地图添加3D饼图 R语言数据分析指南
2024-12-05
1

欢迎关注R语言数据分析指南

最近遇到有观众老爷问如何给地图添加饼图-3D立体饼图,小编之前介绍过添加基础饼图的案例,既然观众老爷们有此需求,本节小编就通过一篇文档来介绍一下如何添加3D饼图。数据为随意构建,代码在其之上做了些许修改,无任何意义,仅供参考。数据+详细代码稍后会上传到交流群内,购买过小编绘图文档的朋友可在所加的交流群内获取下载,有需要的朋友可关注文末介绍购买小编的R绘图文档。购买前请咨询,零基础不要买。

案例图

结果图

图形解读

此图作为基础图的改进版其主要就在于如何把3D饼图根据经纬度添加到地图上仅此而已,思路可以根据添加人物模型的方法来执行。下面来展示一下代码,非常的简单。

加载R包

library(tidyverse)
library(scatterpie)
library(ggnewscale)
library(ggimage)
BiocManager::install("plotrix",force = TRUE)
library(plotrix)

整理地图数据

map <- map_data("state") %>% 
  mutate(type=case_when(region %in% c('washington',"oregon","california",
                                      "nevada","colorado","texas","kansas",
                                      "montana","carolina",
                                      "wisconsin") ~ "a",
                        TRUE ~ "b"))

df <- map %>% filter(type=="a") %>% 
  group_by(region) %>%
  summarise(long = mean(range(long)),
            lat = mean(range(lat))) %>% 
  left_join(.,read_tsv("region.tsv"),by="region")

构建3D饼图的数据

dff <- df %>% head(1) %>% select(-2,-3,-r) %>% 
  pivot_longer(-region) %>% 
  filter(value > 0 ) %>% 
  mutate(per=value/sum(value)*100) %>% 
  mutate(per=paste0(per,"%"))

绘制3D饼图

dev.off()
# 设置背景色为透明
par(bg ="transparent")

pie3D(dff$value,
      edges=1000,
      radius=2,
      col=c("#E54E21","#5b7314","#c3d6ce","#89a6bb"),
      height=0.25,
      theta=pi/5)
# 此处将图片手动导出为png格式,命名为california

构建图像数据集

img <- data.frame(name = c("Human","california"),
                  long = c(-120,-119),
                  lat = c(26,35.3),
                  im=c("Human.png","california.png"))

绘制地图

dev.off()

ggplot() +
   geom_polygon(data= map,
               aes(x=long, y=lat,group=group,fill=type),
               color="orange",linewidth=0.4,alpha=0.3,show.legend = F)+
  scale_fill_manual(values=c("#FDDDA0","white"))+
  new_scale_fill() +
  geom_scatterpie(data=df %>% filter(region !="california"),aes(x=long,y=lat,r=r),
                  cols=c("H3N2","H3N3","H3N6","H3N8","H3NX"),color=NA,alpha=.8)+
  scale_fill_manual(values = c("#E54E21","#5b7314","#c3d6ce","#89a6bb","#454b87"))+
  labs(fill="Subtype")+
  coord_equal()+
  # 添加常规饼图
  geom_scatterpie_legend(df$r, x=-110, y=22,color="black",size=3)+
  geom_image(data=img %>% filter(name !="california"),
             aes(x=long,y=lat,image=im),size=0.12,inherit.aes = F)+
  geom_image(data=img %>% filter(name !="california"),
             aes(x=-118,y=40,image=im),size=0.04,inherit.aes = F)+
  geom_image(data=img %>% filter(name !="california"),
             aes(x=-93,y=38.5,image=im),size=0.04,inherit.aes = F)+
  # 添加3D饼图
  geom_image(data=img %>% filter(name=="california"),
             aes(x=long,y=lat,image=im),size=0.28,inherit.aes = F) +
  geom_image(data=img %>% filter(name=="california"),
             aes(x=-90,y=50,image=im),size=0.28,inherit.aes = F) +
  annotate(geom="text",x=-116,y=28,label="Human \n H3N8 \n infection",
           size=3.5,color="black")+
  annotate(geom="text",x=-109,y=26,label="NO. isolates",
           size=3.5,color="black")+
  theme_void()+
  theme(plot.margin = margin(0,1,0,0,unit="cm"),
        legend.key.height = unit(0.2,'cm'),
        legend.key.spacing.y = unit(0.3,"cm"))

关注下方公众号下回更新不迷路

购买介绍

本节介绍到此结束,有需要学习R数据可视化的朋友欢迎到淘宝店铺:R语言数据分析指南,购买小编的R语言可视化文档(2024版),购买将赠送2023年的绘图文档内容。目前此文档(2023+2024)已经更新上传200案例文档,每个案例都附有相应的数据和代码,并配有对应的注释文档,方便大家学习和参考。

2024更新的绘图内容将同时包含数据+代码+注释文档+文档清单,2023无目录仅有数据文件夹,小编只分享案例文档,不额外回答问题,无答疑服务,零基础不推荐买。

案例特点

所选案例图均属于个性化分析图表完全适用于论文发表,内容异常丰富两年累计发布案例图200+,2024年6月起提供html版注释文档更加直观易学。文档累计上千人次购买拥有良好的社群交流体验。R代码结构清晰易懂,为防止中文乱码提供单独的注释文档

R代码结构清晰易懂,为防止中文乱码2024年6月起提供单独html注释文档

群友精彩评论

淘宝店铺

2024年已更新案例图展示

2023年案例图展示


【声明】内容源于网络
0
0
R语言数据分析指南
R语言重症爱好者,喜欢绘制各种精美的图表,喜欢的小伙伴可以关注我,跟我一起学习
内容 1180
粉丝 0
R语言数据分析指南 R语言重症爱好者,喜欢绘制各种精美的图表,喜欢的小伙伴可以关注我,跟我一起学习
总阅读410
粉丝0
内容1.2k