python 用 matplotlib 绘制 南丁格玫瑰图步骤详解

0、import

import string
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

1、极坐标系

复制代码
# 设置画布
fig = plt.figure(figsize=(12, 8),    # 画布尺寸
                 facecolor='lightyellow'    # 画布背景色
                )

# 设置极坐标系
ax = plt.axes(polar=True)   # 实例化极坐标系
ax.set_theta_direction(-1)  # 顺时针为极坐标正方向
ax.set_theta_zero_location('N')     # 极坐标 0° 方向为 N
复制代码

效果:

 

 2、添加数据绘制极条图

复制代码
data = [805, 598, 831, 586, 357, 562, 692, 623, 575, 605, 623, 585, 573,
            323, 805, 873, 773, 500, 396, 744, 892, 795, 598, 494, 469, 373]

theta = np.linspace(0, 2*np.pi, len(data))    # 等分极坐标系

# 设置画布
fig = plt.figure(figsize=(12, 8),    # 画布尺寸
                 facecolor='lightyellow'    # 画布背景色
                )

# 设置极坐标系
ax = plt.axes(polar=True)   # 实例化极坐标系
ax.set_theta_direction(-1)  # 顺时针为极坐标正方向
ax.set_theta_zero_location('N')     # 极坐标 0° 方向为 N


# 在极坐标系中画柱形图
ax.bar(x=theta,    # 柱体的角度坐标
       height=data,    # 柱体的高度, 半径坐标
       width=0.33,    # 柱体的宽度
      );
复制代码

效果:

 

 3、对数据排序、添加颜色映射生成南丁格玫瑰图

复制代码
data = [805, 598, 831, 586, 357, 562, 692, 623, 575, 605, 623, 585, 573,
            323, 805, 873, 773, 500, 396, 744, 892, 795, 598, 494, 469, 373]
data.sort()

theta = np.linspace(0, 2*np.pi, len(data))    # 等分极坐标系

# 设置画布
fig = plt.figure(figsize=(12, 8),    # 画布尺寸
                 facecolor='lightyellow'    # 画布背景色
                )

# 设置极坐标系
ax = plt.axes(polar=True)   # 实例化极坐标系
ax.set_theta_direction(-1)  # 顺时针为极坐标正方向
ax.set_theta_zero_location('N')     # 极坐标 0° 方向为 N


# 在极坐标系中画柱形图
ax.bar(x=theta,    # 柱体的角度坐标
       height=data,    # 柱体的高度, 半径坐标
       width=0.33,    # 柱体的宽度
       color=np.random.random((len(data),3))
      );
复制代码

图形效果:

 

 4、挖空中心、添加数据标注、关闭坐标轴和网格完成南丁格玫瑰图

复制代码
data = [805, 598, 831, 586, 357, 562, 692, 623, 575, 605, 623, 585, 573,
            323, 805, 873, 773, 500, 396, 744, 892, 795, 598, 494, 469, 373]
data.sort()

theta = np.linspace(0, 2*np.pi, len(data))    # 等分极坐标系

# 设置画布
fig = plt.figure(figsize=(12, 8),    # 画布尺寸
                 facecolor='lightyellow'    # 画布背景色
                )

# 设置极坐标系
ax = plt.axes(polar=True)   # 实例化极坐标系
ax.set_theta_direction(-1)  # 顺时针为极坐标正方向
ax.set_theta_zero_location('N')     # 极坐标 0° 方向为 N


# 在极坐标系中画柱形图
ax.bar(x=theta,    # 柱体的角度坐标
       height=data,    # 柱体的高度, 半径坐标
       width=0.33,    # 柱体的宽度
       color=np.random.random((len(data_list),3))
      )
## 绘制中心空白
ax.bar(x=theta,    # 柱体的角度坐标
       height=130,    # 柱体的高度, 半径坐标
       width=0.33,    # 柱体的宽度
       color='white'
      )
# 添加数据标注
for angle, data, lab in zip(theta, data_list, labs):
    ax.text(angle+0.03, data+100, str(data) ) 

ax.set_axis_off();
复制代码

图形效果:

 

 

 

posted @   赏尔  阅读(4666)  评论(1编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示