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

news2025/5/19 9:24:52

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.coloradmin.cn/o/2378317.html

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

相关文章

炼丹学习笔记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 在其他教程中,都是介绍的如下命令&#xff0c…

中国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 数据共享方式&#xff1a…

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&#xf…

c#车检车构客户管理系统软件车辆年审短信提醒软件

# CMS_VehicleInspection 车检车构客户管理系统软件车辆年审短信提醒软件 # 开发背景 软件是给泸州某公司开发的车检车构客户管理系统软件。用于在车检年审到期前一个月给客户发送车检短信提醒 # 功能描述 主要功能:车辆年审前一个月给客户发年审短信提醒&#xf…

通俗版解释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…

【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后&#xff…