循序渐进,学会用pyecharts绘制玫瑰图

这篇具有很好参考价值的文章主要介绍了循序渐进,学会用pyecharts绘制玫瑰图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

循序渐进,学会用pyecharts绘制玫瑰图

玫瑰图简介

玫瑰图全称南丁格尔玫瑰图,是英国护士和统计学家弗罗伦斯·南丁格尔发明的,又名为极区图。

南丁格尔自己常昵称这类图为鸡冠花图(coxcomb),用以表达军医院季节性的死亡率,提供给那些不太能理解传统统计报表的公务人员。

在疫情期间经常看到那种盘旋的像玫瑰一样的、用来展示不同地区的新增等数据的图形,就是玫瑰图。

玫瑰图是一种圆形的直方图,即有饼图的特征,也有直方图的特征。

在Python中,可以使用pyecharts库中绘制饼图的组件Pie实现玫瑰图,本文就循序渐进地介绍一步步将饼图演变成玫瑰图。

绘图准备

  • 安装pyecharts库
pip install pyecharts
  • 准备示例数据

本文用十种水果的热量(kcal/100g)值对比来做演示。(数据来源于网络)

# coding=utf-8
import pandas as pd

fruits = {'香蕉': 115, '梨': 79, '椰子': 241, '柿子': 74, '鲜枣': 125,
          '榴莲': 147, '石榴': 72, '菠萝蜜': 105, '牛油果': 143, '山楂': 102}
s_fruits = pd.Series(fruits)
print(s_fruits)
香蕉     115
梨       79
椰子     241
柿子      74
鲜枣     125
榴莲     147
石榴      72
菠萝蜜    105
牛油果    143
山楂     102
dtype: int64

绘制饼图

先根据初始数据,绘制一个基本的饼图。

绘制饼图使用pyecharts中的Pie组件,先初始化一个Pie对象,调用add()方法添加绘图用的数据,再链式调用set_series_opts()、set_global_opts()设置饼图的标签、标题、图例等,最后链式调用render()方法将图形渲染到HTML文件中,可以用浏览器打开绘图结果。

from pyecharts.charts import Pie
from pyecharts import options as opts

# 饼图
pie = Pie(init_opts=opts.InitOpts(width='800px', height='600px', bg_color='white'))
pie.add(
    '', [list(z) for z in zip([fruit for fruit in s_fruits.index], s_fruits)], center=['50%', '50%']
).set_series_opts(
    label_opts=opts.LabelOpts(formatter="{b}: {c}"),
).set_global_opts(
    title_opts=opts.TitleOpts(title='水果的热量对比(kcal/100g)', pos_left='300', pos_top='20',
        title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),
    legend_opts=opts.LegendOpts(is_show=False)
).render('fruits_calorie1.html')

循序渐进,学会用pyecharts绘制玫瑰图

此时绘制了一个普通的饼图,已经可以对比展示数据了。

绘制环形饼图

要将一个饼图设置成环形饼图,在添加数据的add()方法中使用radius参数设置。

radius参数接收一个列表或元组,列表由两个数值或百分比组成,如radius=[‘40%’, ‘60%’],分别表示饼图的内半径和外半径,大部分情况用百分比。

饼图的内半径默认为0,外半径默认为画布高宽中较小的一项的一半,所以饼图默认是从圆心开始的,大小根据画布大小自适应。

# 环形饼图
pie = Pie(init_opts=opts.InitOpts(width='800px', height='600px', bg_color='white'))
pie.add(
    '', [list(z) for z in zip([fruit for fruit in s_fruits.index], s_fruits)],
    radius=['40%', '60%'], center=['50%', '50%']
).set_series_opts(
    label_opts=opts.LabelOpts(formatter="{b}: {c}"),
).set_global_opts(
    title_opts=opts.TitleOpts(title='水果的热量对比(kcal/100g)', pos_left='300', pos_top='20',
        title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),
    legend_opts=opts.LegendOpts(is_show=False)
).render('fruits_calorie2.html')

循序渐进,学会用pyecharts绘制玫瑰图

设置radius参数后饼图变成了环形饼图。当然,玫瑰图并不一定是“空心”的,不用先修改成环形饼图也可以。

绘制玫瑰图

在饼图的基础上,在add()方法中添加rosetype="radius"参数,就可以绘制出玫瑰图。

rosetype参数用于设置是否展示成南丁格尔玫瑰图,默认None(不展示成玫瑰图)。

rosetype有’radius’和’area’两种模式:

  • radius模式:用扇形圆心角展现数据的百分比,通过半径展现数据大小。

  • area模式:所有扇形圆心角相同,仅通过半径展现数据大小。

# 玫瑰图
pie = Pie(init_opts=opts.InitOpts(width='800px', height='600px', bg_color='white'))
pie.add(
    '', [list(z) for z in zip([fruit for fruit in s_fruits.index], s_fruits)],
    radius=['10%', '70%'], center=['50%', '50%'], rosetype="radius"
).set_series_opts(
    label_opts=opts.LabelOpts(formatter="{b}: {c}")
).set_global_opts(
    title_opts=opts.TitleOpts(title='水果的热量对比(kcal/100g)', pos_left='300', pos_top='20',
        title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),
    legend_opts=opts.LegendOpts(is_show=False)
).render('fruits_calorie3.html')

循序渐进,学会用pyecharts绘制玫瑰图

本文使用’radius’模式,用扇形圆心角展现数据的百分比,具有饼图的特征,通过半径展现数据大小,具有直方图的特征。

优化玫瑰图

玫瑰图已经完成了,在展示时可以进行一些优化。

  • 先对数据进行排序。

    使用pandas中的sort_values()方法先将数据排序,再绘制玫瑰图,这样图像的半径依次变大,对比效果更直观。

  • 调整radius的范围。

    根据数据的变化调整radius参数中的内半径和外半径值,改变图形的展示范围,使图像更协调美观。

  • 设置扇形颜色渐变。

    链式调用set_colors()方法来设置玫瑰图的颜色,为了使不同的扇形颜色依次渐变,可以通过设置RGB(red,green,blue)值的变化来实现,如下方代码控制不同数据的R值和B值,将颜色调为红蓝渐变。具体代码如下。

# 玫瑰图美化
s_fruits = s_fruits.sort_values()
pie = Pie(init_opts=opts.InitOpts(width='800px', height='600px', bg_color='white'))
pie.add(
    '', [list(z) for z in zip([fruit for fruit in s_fruits.index], s_fruits)],
    radius=['10%', '70%'], center=['50%', '50%'], rosetype="radius"
).set_series_opts(
    label_opts=opts.LabelOpts(formatter="{b}: {c}"),
).set_global_opts(
    title_opts=opts.TitleOpts(title='水果的热量对比(kcal/100g)', pos_left='300', pos_top='20',
        title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),
    legend_opts=opts.LegendOpts(is_show=False)
).set_colors(
    ['rgb({r},0,{b})'.format(r=255-20*(len(s_fruits)-x+1), b=255-15*x) for x in range(len(s_fruits))]
).render('fruits_calorie4.html')

循序渐进,学会用pyecharts绘制玫瑰图

经过以上几个步骤的演进,一个不错的玫瑰图完成了。这样一步一步地调整和演进,可以方便大家学习。

如果本文对你有帮助,欢迎点赞、收藏和关注。

参考文档:
[1] pyecharts官方文档:https://pyecharts.org/#/zh-cn/basic_charts文章来源地址https://www.toymoban.com/news/detail-422498.html

到了这里,关于循序渐进,学会用pyecharts绘制玫瑰图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Godot引擎 4.0 文档 - 循序渐进教程 - 节点和场景

    Nodes and Scenes — Godot Engine (stable) documentation in English 在Godot 关键概念概述中,我们看到 Godot 游戏是一棵场景树,每个场景都是一棵节点树。在本课中,我们将对它们进行更多解释。您还将创建您的第一个场景。 节点是游戏的基本构建块 。它们就像食谱中的配料。Godot中有几十

    2024年02月05日
    浏览(87)
  • Python应用程序部署至K8s——循序渐进版

    (1)Pod处于一直Pending状态 解决方法参考:0/1 nodes are available: 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn‘t-CSDN博客 (2)Pod处于CrashLoopBackOff状态 原因:python不能够常驻,只能运行一次,且是后台运行情况,则会出错。 解决方法:将程序设置成能够常驻的,并且

    2024年03月22日
    浏览(88)
  • 基于SqlSugar的开发框架循序渐进介绍(28)-- 快速构建系统参数管理界面

    在参照一些行业系统软件的时候,发现一个做的挺不错的系统功能-系统参数管理,相当于把任何一个基础的系统参数碎片化进行管理,每次可以读取一个值进行管理,这样有利于我们快速的处理业务需求,是一个挺好的功能。本篇随笔模拟这个功能,基于SqlSugar开发框架的基

    2023年04月23日
    浏览(46)
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(1)

    在我们的SqlSugar的开发框架中,整合了Winform端、Vue3+ElementPlus的前端、以及基于UniApp+Vue+ThorUI的移动前端几个前端处理,基本上覆盖了我们日常的应用模式了,本篇随笔进一步介绍前端应用的领域,研究集成WPF的应用端,循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端

    2024年02月09日
    浏览(55)
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(2)

    在前面随笔《循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(1)》中介绍了Mvvm 的开发,以及一些界面效果,本篇随笔继续深入探讨基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发,介绍如何整合SqlSugar框架的基础接口,通过基类继承的方式,简化实际项目的开

    2024年02月09日
    浏览(58)
  • 基于SqlSugar的开发框架循序渐进介绍(27)-- 基于MongoDB的数据库操作整合

    SqlSugar的开发框架本身主要是基于常规关系型数据库设计的框架,支持多种数据库类型的接入,如SqlServer、MySQL、Oracle、PostgreSQL、SQLite等数据库,非关系型数据库的MongoDB数据库也可以作为扩展整合到开发框架里面,通过基类的继承关系很好的封装了相关的基础操作功能,极大

    2023年04月13日
    浏览(47)
  • 基于SqlSugar的开发框架循序渐进介绍(30)-- 整合客户关系管理系统模块功能

    以前在随笔《Winform开发框架之客户关系管理系统(CRM)的开发总结系列1-界面功能展示 》的几篇随笔中介绍过基于WInform开发框架开发的CRM系统,系统的功能主要也是围绕着客户相关信息来进行管理的,经过一些客户的定制应用,以及框架各种功能的完善,系统也已经很完善了

    2024年02月07日
    浏览(53)
  • 华为OD七日集训第8期 - 按算法分类,由易到难,循序渐进,玩转OD

    大家好,我是哪吒。 最近一直在刷华为OD机试的算法题,坚持一天三道题的节奏,已经三个多月了, 刷了300多道题 。 最近还组织了“【陪伴学习】华为OD刷题交流群”,目前有207人在群。 希望用我自己疯狂刷题的劲头,感染大家,让大家爱上刷题,顺利通过华为OD机试,掌

    2024年02月08日
    浏览(48)
  • 华为OD七日集训第5期 - 按算法分类,由易到难,循序渐进,玩转OD

    大家好,我是哪吒。 最近一直在刷华为OD机试的算法题,坚持一天三道题的节奏,已经8个多月了, 刷了380多道题 。 最近还组织了“【陪伴学习】华为OD刷题交流群”,目前有261人在群。 希望用我自己疯狂刷题的劲头,感染大家,让大家爱上刷题,顺利通过华为OD机试,掌握

    2024年04月14日
    浏览(48)
  • 华为OD七日集训第4期 - 按算法分类,由易到难,循序渐进,玩转OD

    大家好,我是哪吒。 最近一直在刷华为OD机试的算法题,坚持一天三道题的节奏,已经三个多月了, 刷了300多道题 。 最近还组织了“【陪伴学习】华为OD刷题交流群”,目前有207人在群。 希望用我自己疯狂刷题的劲头,感染大家,让大家爱上刷题,顺利通过华为OD机试,掌

    2024年02月07日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包