Python绘制南丁格尔玫瑰图:从入门到实战

Python绘制南丁格尔玫瑰图:从入门到实战

在这里插入图片描述

引言

南丁格尔玫瑰图(Nightingale Rose Chart),也被称为极区图(Polar Area Chart),是一种独特的数据可视化方式。这种图表由弗洛伦斯·南丁格尔(Florence Nightingale)在克里米亚战争期间首创,用于展示不同月份的死亡人数。本文将详细介绍如何使用Python创建南丁格尔玫瑰图,从基础概念到实际应用。

什么是南丁格尔玫瑰图?

南丁格尔玫瑰图是一种圆形图表,它将数据以扇形的形式展示,每个扇形的半径表示数值的大小。与普通的饼图不同,南丁格尔玫瑰图使用扇形的面积(而不是角度)来表示数值,这使得数据之间的差异更加明显。

主要特点:

  1. 使用扇形的面积表示数值
  2. 所有扇形的角度相等
  3. 通过半径的变化来展示数据差异
  4. 适合展示周期性数据

环境准备

在开始之前,我们需要安装必要的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. 时间序列数据:展示月度、季度或年度数据的变化
  2. 周期性数据:展示具有周期性特征的数据
  3. 对比分析:比较不同类别之间的数值差异
  4. 趋势展示:展示数据随时间的变化趋势

进阶技巧

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'

注意事项

  1. 数据量不宜过多,建议控制在12个以内
  2. 确保数据之间的差异足够明显
  3. 选择合适的颜色方案,避免使用过于相似的颜色
  4. 添加适当的图例和标签
  5. 注意中文字体的显示问题,确保系统安装了所需的中文字体

总结

南丁格尔玫瑰图是一种强大的数据可视化工具,特别适合展示周期性数据和进行对比分析。通过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()

参考资料

  1. Matplotlib官方文档
  2. 数据可视化最佳实践指南
  3. 南丁格尔玫瑰图的历史与应用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/81211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机操作系统概要

不谋万世者,不⾜谋⼀时。不谋全局者 ,足谋⼀域 。 ——陈澹然《寤⾔》《迁都建藩议》 操作系统 一.对文件简单操作的常用基础指令 ls ls 选项 目录或⽂件名:罗列当前⽬录下的⽂件 -l:以长格式显示⽂件和⽬录的详细信息 -a 或 --all&…

<PLC><视觉><机器人>基于海康威视视觉检测和UR机械臂,如何实现N点标定?

前言 本系列是关于PLC相关的博文,包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。 PLC品牌包括但不限于西门子、三菱等国外品牌,汇川、信捷等国内品牌。 除了PLC为主要内容外,相关设备如触摸屏(HMI)、交换机等工控产品,如果有…

从专家编码到神经网络学习:DTM 的符号操作新范式

1st author: Paul Soulos paper: Differentiable Tree Operations Promote Compositional Generalization ICML 2023 code: psoulos/dtm: Differentiable Tree Machine 1. 问题与思路 现代深度学习在连续向量空间中取得了巨大成功,然而在处理具有显式结构&#x…

微信小程序第三方代开发模式技术调研与实践总结

🚀 微信小程序第三方代开发模式技术调研与实践总结 📖 前言 随着企业对私有化品牌运营诉求的增加,许多大型客户希望将原本由 SaaS 平台统一提供的小程序迁移至自有主体(AppID)下运行,同时又希望继续沿用 SaaS 平台的业务服务与数据托管方式。微信开放平台提供的“小程…

开启智能未来:DeepSeek赋能行业变革之路

前言 在人工智能重构生产关系的2025年,DeepSeek以其革命性的推理能力和Python生态的技术延展性,正在重塑内容创作与数据智能的边界。本书以"工具迭代思维升维"为双轮驱动,构建从认知突破到商业落地的完整知识图谱。 DeepSeek的崛…

常见三维引擎坐标轴 webgl threejs cesium blender unity ue 左手坐标系、右手坐标系、坐标轴方向

平台 / 引擎坐标系类型Up(上)方向Forward(前进)方向前进方向依据说明Unity左手坐标系YZtransform.forward 是 Z 轴正方向,默认摄像机朝 Z 看。Unreal Engine左手坐标系ZXUE 的角色面朝 X,默认使用 GetActor…

Cold Diffusion: Inverting Arbitrary Image Transforms Without Noise论文阅读

冷扩散:无需噪声的任意图像变换反转 摘要 标准扩散模型通常涉及两个核心步骤:图像降质 (添加高斯噪声)和图像恢复 (去噪操作)。本文发现,扩散模型的生成能力并不强烈依赖于噪声的选择&#xf…

Java并发编程核心组件简单了解

一、Lock体系 1. ReentrantLock(可重入锁) Lock lock new ReentrantLock(); lock.lock(); try {// 临界区代码 } finally {lock.unlock(); }特点:可重入、支持公平/非公平策略优势:可中断锁获取、定时锁等待使用场景&#xff1…

第二个五年计划!

下一阶段!5年后!33岁!体重维持在125斤内!腰围74! 健康目标: 体检指标正常,结节保持较小甚至变小! 工作目标: 每年至少在一次考评里拿A(最高S,A我理…

Redis(三) - 使用Java操作Redis详解

文章目录 前言一、创建项目二、导入依赖三、键操作四、字符串操作五、列表操作六、集合操作七、哈希表操作八、有序集合操作九、完整代码1. 完整代码2. 项目下载 前言 本文主要介绍如何使用 Java 操作 Redis 数据库,涵盖项目创建、依赖导入及 Redis 各数据类型&…

【Folium】使用离线地图

文章目录 相关文献离线地图下载Folium 使用离线地图 相关文献 Folium — Folium 0.19.5 documentationOffline Map Maker 离线地图下载 我们使用 Offline Map Maker 进行地图下载。 特别注意:Folium 默认支持 WGS84 坐标系,建议下载 WGS84 坐标系的地…

DeepSearch:字节新一代 DeerFlow 框架

项目地址:https://github.com/bytedance/deer-flow/ 【全新的 Multi-Agent 架构设计】独家设计的 Research Team 机制,支持多轮对话、多轮决策和多轮任务执行。与 LangChain 原版 Supervisor 相比,显著减少 Tokens 消耗和 API 调用次数&#…

Qt—用SQLite实现简单的注册登录界面

1.实现目标 本次实现通过SQLite制作一个简易的登录窗口,当点击注册按钮时,登录窗口会消失,会出现一个新的注册界面;完成注册或退出注册时,注册窗口会消失,重新出现登录窗口。注册过的用户信息会出现在SQLi…

day 18:零基础学嵌入式之数据结构——

一、基础内容 1.数据结构:相互之间存在一种或多种特定关系的数据元素的集合。 2.逻辑结构 (1)集合,所有数据在同一个集合中,关系平等。 (2)线性,数据和数据之间是一对一的关系 &am…

【SSL证书系列】客户端如何验证https网站服务器发的证书是否由受信任的根证书签发机构签发

客户端验证HTTPS网站证书是否由受信任的根证书颁发机构(CA)签发,是一个多步骤的过程,涉及证书链验证、信任锚(Trust Anchor)检查、域名匹配和吊销状态验证等。以下是详细的验证流程: 1. 证书链的…

iOS即时通信的技术要点

iOS即时通信开发的关键技术要点总结: 一、通讯协议选择 Socket通信 基础实现:使用原生BSD Socket或CFNetwork框架(复杂),推荐第三方库如CocoaAsyncSocket(封装GCDAsyncSocket),简化T…

智能AI构建工地安全网:跌倒、抽搐、区域入侵多场景覆盖

智能AI在工地安全中的应用:从监测到救援的全流程实践 一、背景:高温作业下的工地安全挑战 随着夏季高温持续,工地户外作业环境面临严峻考验。工人因高温疲劳、脱水或突发疾病引发的行为异常(如晕厥、抽搐、跌倒)频发…

Doris

Apache Doris(原名:Palo)是一个高性能、实时的MPP分析型数据库,非常适合海量数据的即席查询、报表分析、指标统计等 OLAP 场景。Doris 的设计目标是:极致查询性能、简单易用、支持高并发分析和明细查询。 一、Doris 核…

# 2-STM32F103-复位和时钟控制RCC

STM32-复位和时钟控制RCC 2-STM32-复位和时钟控制RCC摘要说明本文参考资料如下: 一、STM32最小系统回顾STM32F103C8T6核心板原理图 二、复位三、时钟3.1 时钟树3.2 STM32启动过程3.2 SystemInit()函数3.2.1 SystemInit()第1句:3.2.2 SystemInit()第2句&a…

rk3576 gstreamer opencv

安装gstreamer rk3588使用gstreamer推流_rk3588 gstreamer-CSDN博客 rk3588使用gstreamer推流_rk3588 gstreamer-CSDN博客 Installing on Linux sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-pl…