Python绘制南丁格尔玫瑰图:从入门到实战
Python绘制南丁格尔玫瑰图:从入门到实战
引言
南丁格尔玫瑰图(Nightingale Rose Chart),也被称为极区图(Polar Area Chart),是一种独特的数据可视化方式。这种图表由弗洛伦斯·南丁格尔(Florence Nightingale)在克里米亚战争期间首创,用于展示不同月份的死亡人数。本文将详细介绍如何使用Python创建南丁格尔玫瑰图,从基础概念到实际应用。
什么是南丁格尔玫瑰图?
南丁格尔玫瑰图是一种圆形图表,它将数据以扇形的形式展示,每个扇形的半径表示数值的大小。与普通的饼图不同,南丁格尔玫瑰图使用扇形的面积(而不是角度)来表示数值,这使得数据之间的差异更加明显。
主要特点:
- 使用扇形的面积表示数值
- 所有扇形的角度相等
- 通过半径的变化来展示数据差异
- 适合展示周期性数据
环境准备
在开始之前,我们需要安装必要的Python库:
pip install matplotlib numpy
代码实现
让我们通过一个实际的例子来学习如何创建南丁格尔玫瑰图。我们将使用matplotlib来实现这个可视化效果,这是一个功能强大且广泛使用的数据可视化库。
1. 基础设置
首先,我们需要导入必要的库并设置中文字体支持:
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'SimSun', 'Arial Unicode MS'] # 优先使用的中文字体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
plt.rcParams['font.family'] = 'sans-serif' # 使用无衬线字体
2. 准备数据
在我们的示例中,我们使用月度销售数据来展示南丁格尔玫瑰图的效果:
# 示例数据:不同月份的销售数据
months = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']
values = [120, 150, 180, 200, 250, 300, 280, 260, 220, 190, 160, 140]
3. 创建极坐标图
使用matplotlib的极坐标系统来创建玫瑰图:
# 计算每个扇形的角度(均分360度)
angles = np.linspace(0, 2*np.pi, len(months), endpoint=False)# 创建图形
fig, ax = plt.subplots(figsize=(10, 8), subplot_kw=dict(projection='polar'))# 绘制玫瑰图
bars = ax.bar(angles, values, width=2*np.pi/len(months), bottom=0, alpha=0.8)
4. 设置样式
为了让图表更加美观,我们添加颜色、标签和图例:
# 设置颜色
colors = plt.cm.viridis(np.linspace(0, 1, len(months)))
for bar, color in zip(bars, colors):bar.set_facecolor(color)# 设置标签
ax.set_xticks(angles)
ax.set_xticklabels(months, fontsize=10)# 添加标题和图例
plt.title('月度销售数据 - 南丁格尔玫瑰图', pad=20, fontsize=14)
plt.legend(bars, months, loc='upper right', bbox_to_anchor=(1.3, 1.1), fontsize=10)
实际应用场景
南丁格尔玫瑰图在以下场景特别有用:
- 时间序列数据:展示月度、季度或年度数据的变化
- 周期性数据:展示具有周期性特征的数据
- 对比分析:比较不同类别之间的数值差异
- 趋势展示:展示数据随时间的变化趋势
进阶技巧
1. 自定义颜色方案
可以通过修改颜色映射来创建不同的颜色方案:
# 使用不同的颜色映射
colors = plt.cm.plasma(np.linspace(0, 1, len(months))) # 使用plasma颜色映射
2. 添加数据标签
可以在每个扇形上添加具体数值:
# 添加数值标签
for angle, value in zip(angles, values):ax.text(angle, value, str(value), ha='center', va='bottom')
3. 调整图表样式
可以通过修改各种参数来优化图表外观:
# 调整图表样式
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'SimSun', 'Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['font.family'] = 'sans-serif'
注意事项
- 数据量不宜过多,建议控制在12个以内
- 确保数据之间的差异足够明显
- 选择合适的颜色方案,避免使用过于相似的颜色
- 添加适当的图例和标签
- 注意中文字体的显示问题,确保系统安装了所需的中文字体
总结
南丁格尔玫瑰图是一种强大的数据可视化工具,特别适合展示周期性数据和进行对比分析。通过Python和matplotlib,我们可以轻松创建美观且功能丰富的南丁格尔玫瑰图。在实际应用中,要根据具体需求选择合适的展示方式,并注意数据的可读性和美观性。
完整代码
完整的代码实现如下:
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'SimSun', 'Arial Unicode MS'] # 优先使用的中文字体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
plt.rcParams['font.family'] = 'sans-serif' # 使用无衬线字体def create_nightingale_rose():# 示例数据:不同月份的销售数据months = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']values = [120, 150, 180, 200, 250, 300, 280, 260, 220, 190, 160, 140]# 计算每个扇形的角度(均分360度)angles = np.linspace(0, 2*np.pi, len(months), endpoint=False)# 创建图形fig, ax = plt.subplots(figsize=(10, 8), subplot_kw=dict(projection='polar'))# 绘制玫瑰图bars = ax.bar(angles, values, width=2*np.pi/len(months), bottom=0, alpha=0.8)# 设置颜色colors = plt.cm.viridis(np.linspace(0, 1, len(months)))for bar, color in zip(bars, colors):bar.set_facecolor(color)# 设置标签ax.set_xticks(angles)ax.set_xticklabels(months, fontsize=10)# 添加标题plt.title('月度销售数据 - 南丁格尔玫瑰图', pad=20, fontsize=14)# 添加图例plt.legend(bars, months, loc='upper right', bbox_to_anchor=(1.3, 1.1), fontsize=10)# 显示图形plt.tight_layout()plt.show()if __name__ == '__main__':create_nightingale_rose()
参考资料
- Matplotlib官方文档
- 数据可视化最佳实践指南
- 南丁格尔玫瑰图的历史与应用
相关文章:

Python绘制南丁格尔玫瑰图:从入门到实战
Python绘制南丁格尔玫瑰图:从入门到实战 引言 南丁格尔玫瑰图(Nightingale Rose Chart),也被称为极区图(Polar Area Chart),是一种独特的数据可视化方式。这种图表由弗洛伦斯南丁格尔ÿ…...
概率与期望总结
一、概率 概念:无需多言;几个公式( Ω \Omega Ω 表示整个样本空间): 以下公式均有 A , B ⊆ Ω , 且 P ( A ) , P ( B ) > 0. P ( A ∪ B ) P ( A ) P ( B ) − P ( A ∩ B ) , P ( A ∣ B ) P ( A B ) P ( B…...

炼丹学习笔记3---ubuntu2004部署运行openpcdet记录
前言 环境 cuda 11.3 python 3.8 ubuntu2004 一、cuda环境检测 ylhy:~/code_ws/OpenPCDet/tools$ nvcc -V nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2021 NVIDIA Corporation Built on Sun_Mar_21_19:15:46_PDT_2021 Cuda compilation tools, release 11.3…...

深入解析BGP路由反射器与联邦:突破IBGP全连接限制的两种方案
一、引言:大型BGP网络的挑战 在大型BGP网络架构中,传统的IBGP全连接架构会带来严重的扩展性问题。当网络中存在N台路由器时,需要维护N*(N-1)/2个IBGP连接,这对设备资源和运维管理都是巨大挑战。本文将深入解析两种主流解决方案&a…...

QT设置MySQL驱动
QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7 第一步:下载MySQL https://dev.mysql.com/downloads/mysql/ 解压缩下载的安装包,其目录结构如下所示: 第二…...

String的一些固定程序函数
append reverse length toString...

3.2/Q2,Charls最新文章解读
文章题目:Transition of nighttime sleep duration and sleep quality with incident cardiovascular disease among middle-aged and older adults: results from a national cohort study DOI:10.1186/s13690-025-01577-5 中文标题:中老年人…...

大麦(Hordeum vulgare)中 BAHD 超家族酰基转移酶-文献精读129
Systematic identification and expression profiles of the BAHD superfamily acyltransferases in barley (Hordeum vulgare) 系统鉴定与大麦(Hordeum vulgare)中 BAHD 超家族酰基转移酶的表达谱分析 摘要 BAHD 超家族酰基转移酶在植物中催化和调控次…...

docker迅雷自定义端口号、登录用户名密码
在NAS上部署迅雷,确实会带来很大的方便。但是目前很多教程都是讲怎么部署docker迅雷,鲜有将自定义配置的方法。这里讲一下怎么部署,并重点讲一下支持的自定义参数。 一、部署docker 在其他教程中,都是介绍的如下命令,…...

中国30米年度土地覆盖数据集及其动态变化(1985-2022年)
中文名称 中国30米年度土地覆盖数据集及其动态变化(1985-2022年) 英文名称:The 30 m annual land cover datasets and its dynamics in China from 1985 to 2022 CSTR:11738.11.NCDC.ZENODO.DB3943.2023 DOI 10.5281/zenodo.8176941 数据共享方式:…...

3D个人简历网站 5.天空、鸟、飞机
1.显示天空 models下新建文件Sky.jsx Sky.jsx // 从 React 库中导入 useRef 钩子,用于创建可变的 ref 对象 import { useRef } from "react"; // 从 react-three/drei 库中导入 useGLTF 钩子,用于加载 GLTF 格式的 3D 模型 import { useGLT…...

STM32IIC实战-OLED模板
STM32IIC实战-OLED模板 一,SSD1306 控制芯片1, 主要特性2,I2C 通信协议3, 显示原理4, 控制流程5, 开发思路 二,HAL I2C API 解析I2C 相关 API1,2,3,4…...
Sparse4D运行笔记
Sparse4D有三个版本,其中V1和V2版本的官方文档中环境依赖写得比较模糊且依赖库有版本冲突。 1. Sparse4D V1 创建环境 conda create sparse4dv1 python3.8 激活环境 conda activate sparse4dv1 安装torch, torchvision, torchaudio pip install torch1.13.0c…...
Redis设计与实现——分布式Redis
Redis Sentinel(哨兵) Sentinel 的工作机制 故障检测(Failure Detection) 主观下线(Subjective Down):单个 Sentinel 实例检测到主节点在30 秒内无响应,标记其为 SDOWN。 客观下线…...
多指标组合策略
该策略(MultiConditionStrategy)是一种基于多种技术指标和市场条件的交易策略。它通过综合考虑多个条件来生成交易信号,从而决定买入或卖出的时机。 以下是对该策略的详细分析: 交易逻辑思路 1. 条件1:星期几和价格变化判断 - 该条件根据当前日期是星期几以及价格的变化…...

c#车检车构客户管理系统软件车辆年审短信提醒软件
# CMS_VehicleInspection 车检车构客户管理系统软件车辆年审短信提醒软件 # 开发背景 软件是给泸州某公司开发的车检车构客户管理系统软件。用于在车检年审到期前一个月给客户发送车检短信提醒 # 功能描述 主要功能:车辆年审前一个月给客户发年审短信提醒…...
Java爬虫能处理京东商品数据吗?
Java爬虫完全可以处理京东商品数据。通过Java爬虫技术,可以高效地获取京东商品的详细信息,包括商品名称、价格、图片、描述等。这些信息对于市场分析、选品上架、库存管理和价格策略制定等方面具有重要价值。以下是一个完整的Java爬虫示例,展…...

通俗版解释CPU、核心、进程、线程、协程的定义及关系
通俗版解释(比喻法) 1. CPU 和核心 CPU 一个工厂(负责干活的总部)。核心 工厂里的车间(比如工厂有4个车间,就能同时处理4个任务)。 2. 进程 进程 一家独立运营的公司(比如一家…...

大语言模型 11 - 从0开始训练GPT 0.25B参数量 MiniMind2 准备数据与训练模型 DPO直接偏好优化
写在前面 GPT(Generative Pre-trained Transformer)是目前最广泛应用的大语言模型架构之一,其强大的自然语言理解与生成能力背后,是一个庞大而精细的训练流程。本文将从宏观到微观,系统讲解GPT的训练过程,…...

USRP 射频信号 采集 回放 系统
USRP 射频信号采集回放系统 也可以叫做: 利用宽带RF录制和回放系统实现6G技术研究超宽带射频信号采集回放系统使用NI USRP平台实现射频信号录制和回放操作演示USRP也能实现多通道宽带信号流盘回放了! 对于最简单的实现方法就是使用LabVIEW进行实现 采…...

【skywalking】index“:“skywalking_metrics-all“},“status“:404}
skywalking 启动报错 java.lang.RuntimeException: {"error":{"root_cause":[{"type":"index_not_found_exception","reason":"no such index [skywalking_metrics-all]","resource.t ype":"inde…...
handsome主题美化及优化:10.1.0最新版 - 1
文章目录 前言右侧导航栏主题标题居中页面两侧框架留白间距handsome 原生入站提示评论一键赞、踩、打卡时光机头像圆形logo 扫光赞赏按钮跳动鼠标点击特效复制版权提示彩色标签云及右栏数字自定义右键响应时间和访客总数全站字数统计版权提示时间流逝添加心知天气总结 前言 ha…...
(9)python开发经验
文章目录 1 os.path.join()拼接路径2 条件变量3 添加临时环境变量 更多精彩内容👉内容导航 👈👉Qt开发 👈👉python开发 👈 1 os.path.join()拼接路径 os.path.join() 是 Python 中处理文件路径拼接的核心函…...

【C++详解】string各种接口如何使用保姆级攻略
文章目录 一、string介绍二、string使用构造函数析构函数赋值运算符重载string的遍历修改方法1、下标[]2、迭代器3、范围for 迭代器使用详解const迭代器反向迭代器(reverse) Capacity(容量相关)size/lengthmax_sizecapacityclear/emptyshrink_to_fit(缩容)reserve(扩…...

2025深圳杯D题法医物证多人身份鉴定问题四万字思路
Word版论文思路和千行Python代码下载:https://www.jdmm.cc/file/2712074/ 引言 法医遗传学中的混合生物样本分析,特别是短串联重复序列(Short Tandem Repeat, STR)分型结果的解读,是现代刑事侦查和身份鉴定领域的核心…...

【时时三省】(C语言基础)字符数组应用举例2
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 例题: 有3个字符串,要求找出其中“最大”者。 解题思路: 可以设一个二维的字符数组str,大小为320,即有3行20列(每一…...

Mysql触发器(附案例)
文章目录 触发器简介1、insert类型2、update类型3、delete类型总结 触发器简介 触发器是与表有关的数据库对象,指定在 insert/update/delete 之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性…...

使用DDR4控制器实现多通道数据读写(十二)
一、章节概括 这一节使用interconnect RTL ip核将DDR4与四个读写通道级联,在测试工程中,将四个通道同时写入/读出地址与数据,并使用modelsim仿真器仿真,四个通道同时发送写请求或读请求后,经过interconnect后ÿ…...

Kafka 生产者工作流程详解
以下是 Kafka 生产者工作流程的清晰分步解释,结合关键机制与用户数据: 1. 生产者初始化与数据发送 主线程创建生产者对象,调用 send(ProducerRecord) 发送消息。 拦截器(可选):可添加自定义逻辑(…...

完整卸载 Fabric Manager 的方法
目录 ✅ 完整卸载 Fabric Manager 的方法 1️⃣ 停止并禁用服务 2️⃣ 卸载 Fabric Manager 软件包 3️⃣ 自动清理无用依赖(可选) 4️⃣ 检查是否卸载成功 ✅ 补充(仅清除服务,不删包) ✅ 完整卸载 Fabric Mana…...