前言

在前文中,我们介绍了使用pyecharts绘制南丁格尔玫瑰图,本章我们再学习一下使用matplotlib绘制南丁格尔玫瑰图,了解在极坐标系中绘制柱状图。并对比一下两种不同的绘制方法,如何实现?

介绍

玫瑰图是弗罗伦斯·南丁格尔所发明的。又名为极坐标面积图,是一种圆形的直方图。 南丁格尔自己常昵称这类图为鸡冠花图(coxcomb),适用于绘制比较、随时间变化的循环现象。和传统的饼图展示形式单一相比,南丁格尔玫瑰图更加绚丽,给人的感觉更直观、深刻,因此,南丁格尔玫瑰图在数据可视化领域的应用十分广泛。

Matplotlib

Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。是一个非常强大的 Python 画图工具,我们可以使用该工具将很多数据通过图表的形式更直观的呈现出来。可以用来绘制各种静态,动态,交互式的图表,线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等等。

安装matplotlib库:

pip install matplotlib

准备数据

以水果为例,生成一组数据。

# coding=utf-8
import pandas as pd
import matplotlib.pyplot as plt
import numpy as npfruits = {'香蕉': 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

源码实现

将上面的数据拆分成为一维数组。

labels = []
nums = []
for x,y in [list(z) for z in zip([fruit for fruit in s_fruits.index], s_fruits)]:labels.append(x)nums.append(y)labels
['香蕉', '梨', '椰子', '柿子', '鲜枣', '榴莲', '石榴', '菠萝蜜', '牛油果', '山楂']

绘制玫瑰图所需要的参数,柱子数量、每个柱子的宽度和角度。

size= len(nums)  # 柱子的数量
width = 2 * np.pi / size # 每个柱子的宽度
rad = np.cumsum([width] * size)  # 每个柱子的角度

配置每一个柱子的颜色。

# 转化为小数的rgb色列表
colors = [(0.68359375, 0.02734375, 0.3203125),(0.78125, 0.05078125, 0.2578125),(0.875, 0.0390625, 0.1796875),(0.81640625, 0.06640625, 0.0625),(0.8515625, 0.1484375, 0.08203125),(0.90625, 0.203125, 0.13671875),(0.89453125, 0.2890625, 0.0703125),(0.84375, 0.2421875, 0.03125),(0.9140625, 0.26953125, 0.05078125),(0.85546875, 0.31640625, 0.125)] 

绘制玫瑰图

text使用参数,请参考:matplotlib.axes.Axes.text()

plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文显示plt.figure(figsize=(12, 12),dpi=300,)  # 创建画布
ax = plt.subplot(projection='polar')
ax.set_ylim(-8, np.ceil(max(nums) + 1))  # 中间空白,-8为空白半径大小,可自行调整
ax.set_theta_zero_location('N',-5.0)  # 设置极坐标的起点方向 W,N,E,S, -5.0为偏离数值,可自行调整
ax.set_theta_direction(1) # 1为逆时针,-1为顺时针
ax.grid(False)  # 不显示极轴
ax.spines['polar'].set_visible(False)  # 不显示极坐标最外的圆形
ax.set_yticks([])  # 不显示坐标间隔
ax.set_thetagrids([])  # 不显示极轴坐标ax.bar(rad, nums, width=width, color=colors, alpha=1) # 画图# 设置text
for i in np.arange(len(nums)):ax.text(rad[i],  # 角度nums[i]-20,  # 长度labels[i]+'\n'+str(nums[i]),  # 文本rotation=rad[i] * 180 / np.pi -5,  # 文字角度rotation_mode='anchor',            # 对齐文本,可选参数['default','anchor']alpha=0.8,#透明度fontstyle='normal',# 设置字体类型,可选参数[ ‘normal’ | ‘italic’ | ‘oblique’ ],italic斜体,oblique倾斜fontweight='medium', # 设置字体粗细,可选参数 [‘light’, ‘normal’, ‘medium’, ‘semibold’, ‘bold’, ‘heavy’, ‘black’]color='white', # 设置字体颜色size=nums[i]/8, # 设置字体大小ha="center", # 'left','right','center'va="top", # 'top', 'bottom', 'center', 'baseline', 'center_baseline')plt.show()

效果图

优化玫瑰图

通过对nums数组进行排序,可美化玫瑰图,如下:

# 对数组进行排序操作
nums.sort()plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文显示plt.figure(figsize=(12, 12),dpi=300,)  # 创建画布
ax = plt.subplot(projection='polar')
ax.set_ylim(-2, np.ceil(max(nums) + 1))  # 中间空白,-2为空白半径大小,可自行调整
ax.set_theta_zero_location('N',-5.0)  # 设置极坐标的起点方向 W,N,E,S, -5.0为偏离数值,可自行调整
ax.set_theta_direction(1) # 1为逆时针,-1为顺时针
ax.grid(False)  # 不显示极轴
ax.spines['polar'].set_visible(False)  # 不显示极坐标最外的圆形
ax.set_yticks([])  # 不显示坐标间隔
ax.set_thetagrids([])  # 不显示极轴坐标ax.bar(rad, nums, width=width, color=colors, alpha=1) # 画图# 设置text
for i in np.arange(len(nums)):ax.text(rad[i],  # 角度nums[i]-2,  # 长度,-2为文字偏离顶部距离labels[i]+'\n'+str(nums[i]),  # 文本rotation=rad[i] * 180 / np.pi -5,  # 文字角度rotation_mode='anchor',            # 对齐文本,可选参数['default','anchor']alpha=0.8,#透明度fontstyle='normal',# 设置字体类型,可选参数[ ‘normal’ | ‘italic’ | ‘oblique’ ],italic斜体,oblique倾斜fontweight='medium', # 设置字体粗细,可选参数 [‘light’, ‘normal’, ‘medium’, ‘semibold’, ‘bold’, ‘heavy’, ‘black’]color='white', # 设置字体颜色size=nums[i]/0.8, # 设置字体大小ha="center", # 'left','right','center'va="top", # 'top', 'bottom', 'center', 'baseline', 'center_baseline')plt.show()

效果图

使用Matplotlib绘制南丁格尔玫瑰图相关推荐

  1. python+matplotlib绘制南丁格尔玫瑰图

    实验:绘制南丁格尔玫瑰图   本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫 ...

  2. 【Python数据分析——使用matplotlib制作南丁格尔玫瑰图】

    目录 一.介绍 二.相关库 三.数据准备 四.pyecahrts代码实现 五.matplotlib代码实现 一.介绍 玫瑰图是弗罗伦斯·南丁格尔所发明的.又名为极坐标面积图,是一种圆形的直方图. 南丁 ...

  3. python实验之绘制南丁格尔玫瑰图

    一.实验目的 了解玫瑰图的前世今生:了解 matplotlib 标准库中的 pyplot 模块:了解在极坐标 系中绘制柱状图. 二.实验基本原理及步骤(或方案设计及理论计算) 实验步骤: 查阅文档,了 ...

  4. 【Python绘图】pyecharts绘制南丁格尔玫瑰图

    from pyecharts.charts import Pie from pyecharts import options as opts import random# 随机颜色生成 def ran ...

  5. 使用excel中的雷达图绘制南丁格尔玫瑰图

    效果展示: 注: 数据文件链接: https://pan.baidu.com/s/1iF_nQ6hhL0MlO8P4qPDuAA 密码: 1snj 数据展示: 绘制思路: 1.计算出确诊人数的平方根( ...

  6. echarts绘制嵌套环形图(南丁格尔玫瑰图)

    根据专业总人数和学院总人数绘制嵌套环形图 首先,echarts的基本步骤 引入js,准备容器,初始化实例, <script src="lib/echarts.min.js"& ...

  7. R语言ggplot绘制鸡冠花图(南丁格尔玫瑰图)

    南丁格尔玫瑰图也就是鸡冠花图,一种极坐标的​柱状图.图形的大小跟变量分组的数值呈正比.从极坐标延伸出来的每一环可以当做标尺来使用,用来表示分段的大小并代表数值的高低. 首先绘制柱状图 bar<- ...

  8. Python+Matplotlib绘制饼状图模拟南丁格尔玫瑰图

    开学第一课:一定不要这样问老师Python问题 董付国老师Python系列教材推荐与选用参考 ============= 版权声明:由于公众号后台规则问题,本文暂时无法设置原创标记,但仍属原创内容,微 ...

  9. 26.27.28.29.极区图(南丁格尔玫瑰图)、维恩图 (Venn diagram)、面状图(Area chart)、树地图

    26.极区图(南丁格尔玫瑰图) 27.维恩图 (Venn diagram) 28.面状图(Area chart) 29.树地图 26.极区图(南丁格尔玫瑰图) 极区图(又名南丁格尔玫瑰图)呈放射延伸状 ...

最新文章

  1. X@X.X域名转向的实现
  2. 专访Niclas Hedhman:Apache欢迎什么样的开源项目?
  3. I/O映射和内存映射
  4. window平台下 Eclipse Ndk开发中的Method 'NewStringUTF' could not be resolved问题
  5. 如何使用Android SDK开发Android应用?
  6. MVC框架浅析(基于PHP)
  7. 用辩证、动态的眼光看世界
  8. Java中Filter、Listener,拦截器的学习,listener、 filter、servlet 加载顺序及其详解
  9. 通过wget在Linux上下载Java JDK会显示在许可证页面上
  10. 初学QML之QML和C++混合方法
  11. snabbdom vdom 框架
  12. 7-6 A-B (20 分)
  13. java连接Neo4j服务器
  14. Pytorch学习率调整策略
  15. 济南新旧动能转换起步区(济南先行区)Echarts图json文件
  16. Log4j2 日志 依赖 jar包 缺失 导致启动报错 解决方法
  17. redis链接不上,报保护模式
  18. keil5工程 AC5 编译器升级 AC6编译器
  19. 教师节,给老师们写一个随机点名的网页
  20. 零基础入门小程序,实战经验分享

热门文章

  1. 网络天才网页中文版_网络天才网页版(在线玩)-网络天才手游网页版下载v2.2.3-72游戏网...
  2. Day 250/300 《图解HTTP》读书笔记(二)
  3. Junit5系列-什么是Junit5?
  4. 使用Gitee和Hexo创建自己的博客
  5. Vue使用Echarts实现数据可视化
  6. 网页版终端webssh2配置
  7. android 自动更新 覆盖安装后 自动启动的问题
  8. 0x00007ffff7ade419 in memcpy () from /lib/libc.so.6
  9. sel2000服务器自动关闭,解决了SQL SERVER 2000自动停止的问题
  10. 可以媲美TortoiseSVN的LINUX版SVN客户端软件RabbitVCS