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. 南丁格尔玫瑰图的历史与应用

作者:像素艺术家

物联沃分享整理
物联沃-IOTWORD物联网 » Python南丁格尔玫瑰图绘制指南:从入门到精通实战教程

发表回复