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();
图形效果:
非学无以广才,非志无以成学。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架