使用Matplotlib绘制南丁格尔玫瑰图

article/2025/11/1 3:35:29

前言

在前文中,我们介绍了使用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()

效果图


http://chatgpt.dhexx.cn/article/C0QaF0Gk.shtml

相关文章

从南丁格尔图到医学发展史

可视化中,前端用于表现不同类目的数据在总和中的占比的场景,往往会采用饼图。 针对数据大小相近,南丁格尔图的呈现会更加美观。 南丁格尔图,又称玫瑰图,是由弗罗伦斯南丁格尔发明。 弗洛伦斯南丁格尔 开创了护理事业…

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

根据专业总人数和学院总人数绘制嵌套环形图 首先&#xff0c;echarts的基本步骤 引入js&#xff0c;准备容器&#xff0c;初始化实例&#xff0c; <script src"lib/echarts.min.js"></script><style>.box{width: 900px;height: 500px;background…

Python数据可视化之南丁格尔玫瑰图

文章目录 1. 什么是南丁格尔玫瑰图2. 南丁格尔玫瑰图的绘制 1. 什么是南丁格尔玫瑰图 央视新闻用来展示疫情0增长天数的图就是南丁格尔玫瑰图。 南丁格尔玫瑰图&#xff08;Nightingale rose diagram&#xff09;又名鸡冠花图、极坐标区域图。统计学家和医学改革家佛罗伦斯‧…

R-南丁格尔玫瑰图: 仿制效果最好的疫情玫瑰图

这是到目前为止我觉得讲解最为细致、仿制与色彩改进效果最好的疫情玫瑰图教程。所以特约稿给大家学习&#xff01;作者码字不易&#xff0c;还请多多支持。 Angus,温州医科大学在读博士&#xff0c;急诊医学专业&#xff0c;主攻临床数据库及人工智能在危重症患者的应用。 Easy…

教你做超惊艳的南丁格尔玫瑰图

其实早在今年初&#xff0c;疫情还很严重的时候&#xff0c;人民日报发布的这个图就吸引了广大数据分析者的注意。 今天我们就把这个图的前因后果以及怎么做一次性讲清楚。 玫瑰图的前世今生 这个图学名&#xff1a;南丁格尔玫瑰图&#xff0c;是弗罗伦斯南丁格尔女士发明的…

Python科学绘图 南丁格尔图/玫瑰图

文章目录 Github/GItee仓库地址注意生成数据乱序数据渲染图片为png或jpeg顺序数据 Github/GItee仓库地址 ScienceGallery-GithubScienceGallery-Gitee 注意 数据传入到 pyecharts 的时候&#xff0c;需要自行将数据格式转换成上述 Python 原生的数据格式。方法&#xff1a; …

南丁格尔玫瑰图 With ggplot2【R语言】

前言 之前在饼图中提到过&#xff0c;要整理一下南丁格尔玫瑰图的画法&#x1f611; 南丁格尔玫瑰图又名鸡冠花图、极坐标区域图&#xff0c;是南丁格尔在克里米亚战争期间提交的一份关于士兵死伤的报告时发明的一种图表。南丁格尔玫瑰图是在极坐标下绘制的柱状图&#xff0c;…

echarts最简单的南丁格尔玫瑰图+图例

//图标写在方法里面&#xff08;然后在mounted里展示&#xff09; getEcharts(){ var myChart document.getElementById(‘echarts’); let echarts echarts.init(myChart); var option; var legends this.getlowIncomeData_xData; //图例名字&#xff08;在这里作修改&…

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

实验:绘制南丁格尔玫瑰图   本实验有一定难度,有人说matplotlib绘图和matlab大同小异,我看除了一些函数名相同之外,其他的像参数和使用方法很不一样.另外我不知道是不是在matlab中画玫瑰图直接一个"肉丝"函数就成了,为什么matplotlib里面没有~~   无论如何还是感…

R语言-南丁格尔玫瑰图

简介 南丁格尔玫瑰图&#xff08;Nightingale rose chart&#xff09;即极坐标柱形图&#xff0c;是一种圆形的柱形图。由弗罗伦斯-南丁格尔所发明&#xff0c;普通柱形图的坐标系是直角坐标系&#xff0c;而南丁格尔玫瑰图的坐标系是极坐标系。南丁格尔玫瑰图是在极坐标下绘制…

Tableau——制作南丁格尔玫瑰图

一、适用场景: 需要计算总费用或金额的各个部分构成比例的情况 二、简介&#xff1a; 南丁格尔玫瑰图Nightingale rose diagram是弗罗伦斯南丁格尔所发明的&#xff0c;又名为极区图&#xff0c;是一种圆形的直方图。 如果因为组成部分较多而导致饼图分区多且密集&#xff0…

Tableau 南丁格尔玫瑰图

简介:南丁格尔玫瑰图是弗罗伦斯南丁格尔所发明的。又名为极区图。是一种圆形的直方图。 应用场景&#xff1a;可以看到比饼图更加详细地信息。 参考书目&#xff1a;跟阿达学 Tableau 数据可视化 操作步骤&#xff1a; 以示例-超市为例 1、导出相关数据&#xff08;处理数…

南丁格尔玫瑰图

1、绘制南丁格尔玫瑰图的步骤&#xff1a; 数据准备工作&#xff1a;准备好角度数值和半径数值。 建立画布&#xff0c;并将直角坐标转化为极坐标。并对极坐标进行一定的设置。 使用bar函数进行绘图。 对图形进行美化处理。 2、上代码 import numpy as np import pandas a…

❤echarts 南丁格尔玫瑰图的使用以及南丁格尔玫瑰图详细配置

❤echarts 南丁格尔玫瑰图的使用以及南丁格尔玫瑰图详细配置 1、认识 使用可以参考之前文章&#xff0c;会使用直接跳过1 引入官网的南丁格尔玫瑰图效果如下&#xff1a; 使用函数配置分为三个部分&#xff1a;初始化> 设置配置> 地图使用参数 配置代码如下 option…

【Python】数据分析:如何使用matplotlib和pyecharts制作南丁格尔玫瑰图

目录 一、介绍 二、相关库 三、数据准备 四、pyecahrts代码实现 五、matplotlib代码实现 原文作者&#xff1a;我辈理想版权声明&#xff1a;文章原创&#xff0c;转载时请务必加上[原文超链接](https://blog.csdn.net/qq_15028721?spm1010.2135.3001.5421)、作者信息和本…

南丁格尔图(饼状)

今天来做一个南丁格尔图&#xff0c;参考官网&#xff0c;一会会把源码放上去&#xff0c;注释和详细的解释也会放在最下面供参考理解 基于VScode开发&#xff0c;我用的是子组件不是APP.vue code&#xff1a; <template> <div id"main" :style"{width…

[数据可视化] 南丁格尔玫瑰图

南丁格尔玫瑰图 南丁格尔玫瑰图又名鸡冠花图、极坐标区域图&#xff0c;是南丁格尔在克里米亚战争期间提交的一份关于士兵死伤报告时发明的一种图表&#xff0c;以表达军医院季节性的死亡率&#xff0c;从整体上来看: 这张图是用来说明并比较战地医院伤患因各种原因死亡的人数&…

数据分析软件图表详解-南丁格尔图的故事

DataViz数据可视化分析工具中的南丁格尔图也叫南丁格尔玫瑰图、鸡冠花图或极坐标区域图。是由弗洛伦斯南丁格尔发明的。南丁格尔是英国护士和统计学家&#xff0c;出生于意大利的一个英国上流社会的家庭。虽然出身贵族南丁格尔却选择了完全不同的人生道路&#xff0c;选择了当时…

网络层协议和数据链路层协议

1. IP 协议 IP指网际互连协议&#xff0c;Internet Protocol的缩写&#xff0c;是TCP/IP体系中的网络层协议。IP位于TCP/IP模型的网络层(相当于OSI模型的网络层)&#xff0c;它可以向传输层提供各种协议的信息&#xff0c;例如TCP、UDP等&#xff1b;对下可将IP信息包放到链路层…

数据链路层协议(1)

目录 1.获取IP地址 2.打开浏览器&#xff0c;在浏览器中的地址栏上输入需要访问的服务器的URL&#xff08;资源定位符&#xff09; 3.网关路由收到DNS请求报文后&#xff0c;将先查看数据帧的二层封装&#xff0c;确认该数据帧是给自己的&#xff0c;则将解二层封装看三层封…