前几天有读者在知乎上咨询“散点饼图”的问题,用的是scatterpie工具包,这是ggplot2绘图系统的一个拓展包,一共就包含三个函数:

  • geom_scatterpie

  • geom_scatterpie_legend

  • recenter

下面是geom_scatterpie()函数的语法结构:

geom_scatterpie(mapping = NULL,data,cols,pie_scale = 1,sorted_by_radius = FALSE,legend_name = "type",long_format = FALSE,...
)
  • cols:绘制饼图的变量名,至少需要两个;

  • r:使用在映射函数中的参数,用于指定饼图半径大小。

library(ggplot2)
library(scatterpie)
data.frame(x = c(2,4,7,3),y = c(1,3,6,4),a = 1:4,b = 4:1
) -> data
ggplot() +geom_scatterpie(aes(x,y), data,cols = c("a","b")) +theme_bw()

下面这种写法就会报错:

ggplot(data, aes(x,y)) +geom_scatterpie(cols = c("a","b")) +theme_bw()
# Error in diff(range(data[, xvar])) : 缺少参数"data",也没有缺省值

一般来说,在ggplot2绘图系统中,ggplot()函数指定的是全局参数,几何图形函数没有指定的参数就会自动继承全局的参数,但从上面的报错来看,scatterpie工具包并没有适配这一特点,因此在使用时需要注意。

虽然具有“散点”的特征,但是散点饼图的颜色和形状属性通常不能用于映射,可用的主要是大小属性,也就是半径。

data$r = c(0.2,0.1,0.3,0.4)
ggplot() +geom_scatterpie(aes(x ,y,r = r), data,cols = c("a","b"),alpha = 0.5) +theme_bw()

geom_scatterpie_legend()函数可以用来呈现关于半径的图例,完整的语法结构如下:

geom_scatterpie_legend(radius,x, y,n = 5,labeller)
  • radius:控制半径的变量;该参数同样不能继承自全局;

  • x,y:图例放置的横、纵坐标;

  • n:呈现的环形个数;

  • labeller:半径到标签的映射函数,可缺省。

效果如下:

ggplot() +geom_scatterpie(aes(x ,y,r = r), data,cols = c("a","b"),alpha = 0.5) +geom_scatterpie_legend(data$r, n = 4,x = 6, y = 2) +theme_bw()

上图中,图例中的半径从内到外依次为0.1、0.2、0.3、0.4,与标签显示的相同,但它实际代表的值可能是10、20、30、40,这时就可以使用labeller参数进行转换。

ggplot() +geom_scatterpie(aes(x ,y,r = r), data,cols = c("a","b"),alpha = 0.5) +geom_scatterpie_legend(data$r, n = 4,x = 6, y = 2,labeller = function(x) {100*x}) +theme_bw()

也可以在地图上添加饼图:

library(sf)
China <- read_sf("./China/省.shp")
data.frame(A = rpois(35,6),B = rpois(35,2),C = rpois(35,12),lon = st_coordinates(st_centroid(China))[,1],lat = st_coordinates(st_centroid(China))[,2]
) -> dfggplot(China) +geom_sf() +geom_scatterpie(aes(x = lon, y = lat),data = df,cols = c("A", "B", "C")) +theme_bw()

  • 这里与前面存在同样一个问题:在绘制地图中,ggplot2原生的函数geom_sf()能够自动识别出空间数据的坐标信息,因此不需要再指定xy参数,而geom_scatterpie()函数由于不能继承全局参数,数据源、坐标信息等参数都需要单独指定。

总体来说,scatterpie工具包并没有完全地适配ggplot2绘图系统的特点,因此在使用时略显繁琐,但它丰富了几何图形函数的类型还是值得肯定的,希望后续版本能够更加优化。

scatterpie | ggplot2的几何图形拓展包(1):如何在地图中添加饼图相关推荐

  1. R语言ggplot2可视化在可视化图形的X轴标签中添加温度摄氏度符号(add temperature degree symbol on axis label)

    R语言ggplot2可视化在可视化图形的X轴标签中添加温度摄氏度符号(add temperature degree symbol on axis label) 目录

  2. ggspatial | ggplot2的地图制作拓展包(1):如何添加指北针和比例尺

    在前面的推文里,小编介绍了R语言的基础绘图系统和tmap工具包绘制地图的方法.ggplot2工具包作为现在最受欢迎的绘图包,其本身绘制地图的功能并不算强大.但是ggplot2有许多优秀的拓展包,它们共 ...

  3. android studio添加v7包,如何在Android Studio中添加RecyclerView-v7支持包

    一直知道RecyclerView可以代替ListView.GridView使用,聽說功能很強大,但還沒有去學習過.今天想學習,沒想到還沒開始便撞牆了.輸入Recycler,只有這兩個東西,沒有提示Re ...

  4. ggsci | ggplot2的颜色标度拓展包(1):科研配色风格

    ggsci是一个知名的ggplot2拓展包,工具包名称中的sci是science的缩写.它的开发者是两个中国人:Nan Xiao <https://nanx.me>.Miaozhu Li ...

  5. pip安装拓展包--网络超时/Read timed out问题

    pip安装拓展包--网络超时/Read timed out问题 解决方案:切换镜像源(墙皮太厚) 在后面加上: -i https://pypi.douban.com/simple example: p ...

  6. R语言ggplot2可视化:使用dplyr包计算每个分组个数的比例(对计算获得的百分比进行近似,值保留整数部分)、使用ggplot2可视化条形图(bar plot)、并在条形图上添加百分比标签

    R语言ggplot2可视化:使用dplyr包计算每个分组个数的比例(对计算获得的百分比进行近似,值保留整数部分).使用ggplot2可视化条形图(bar plot).并在条形图上添加百分比标签 目录

  7. R语言ggplot2可视化散点图并添加平滑曲线、WVPlots包BinaryYScatterPlot函数可视化一起中一个变量为二元离散变量的散点图(随着年龄变化是否有健康保险的客户的比例)

    R语言ggplot2可视化散点图并添加平滑曲线.WVPlots包BinaryYScatterPlot函数可视化一起中一个变量为二元离散变量的散点图(随着年龄变化是否有健康保险的客户的比例) 目录

  8. R语言ggplot2可视化使用ggridges包可视化山脊图(Ridgeline Plots):山脊图(Ridgeline Plots)应用场景、受试者口服茶碱的之后观察茶碱的浓度变化的山脊图

    R语言ggplot2可视化使用ggridges包可视化山脊图(Ridgeline Plots):山脊图(Ridgeline Plots)应用场景.受试者口服茶碱的之后观察茶碱的浓度变化的山脊图(Rid ...

  9. windows下python依赖包_windows下安装python拓展包

    安装Python集成开发环境IDE 2.IPython:方便今后编译其他扩展库,占用空间92.8M: sudo apt-get install python-dev IPython 为了安装最新版的I ...

最新文章

  1. CF1037H Security——SAM+线段树合并
  2. 关于手机的,发送验证码,正则
  3. 以非泛型方式调用泛型方法(三)
  4. tensorflow mnist read_data_sets fails
  5. 网站服务器令牌获取,adobe - 获取Adobe Sign访问令牌以进行服务器到服务器身份验证 - 堆栈内存溢出...
  6. js去掉第一个换行符_通过异步迭代简化Node.js流程
  7. 【Java从0到架构师】MySQL 基础
  8. 为什么需要学习编程?
  9. web.xml:url-pattern
  10. 《Android 应用案例开发大全(第3版)》——第1.2节掀起Android的盖头来
  11. nexus的下载与安装和启动
  12. u盘修复计算机w7,制作win7系统修复u盘的方法
  13. ubuntu报错:RuntimeError : unexcepted EOF, excepted 2599001 more bytes. The file might be corrupted.
  14. SpringBoot 生成带水印pdf | 中文字体问题
  15. Java单词首字母小写转大写
  16. robots.txt文件示例
  17. Element修改图标大小,设置颜色
  18. 虚拟现实的起源、趋势及应用
  19. ffmpeg---ffmpeg + x264 + fdk-aac + mp3lame 安装
  20. Unity在URP管线下使用TriLib插件加载模型材质不正确的问题

热门文章

  1. 给大学生的几条良心建议
  2. Nginx学习总结(2)——Nginx手机版和PC电脑版网站配置
  3. python用户登陆,Python入门基础--用户登陆
  4. 页面中php传值后循环列表js获取点击的id
  5. python单例模式控制成只初始化一次,常规型的python单例模式在新式类和经典类中的区别。...
  6. shell编程基础:逻辑运算
  7. centos7 查看ip地址
  8. dockerfile 创建自定义的tomcat服务
  9. 《Spring Boot官方指南》28.安全
  10. 解决jquery调用NET webservice跨域的问题