python绘制玫瑰图
时间: 2025-06-24 21:41:09 浏览: 14
### 如何使用 Python 绘制玫瑰图
以下是通过 `matplotlib` 和 `seaborn` 实现玫瑰图的代码示例:
#### 方法一:基于 `matplotlib`
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义数据
categories = ['A', 'B', 'C', 'D', 'E']
values = [25, 15, 30, 10, 20]
# 将类别转换为角度
N = len(categories)
angles = np.linspace(0, 2 * np.pi, N, endpoint=False).tolist()
# 闭合数据以便形成环形结构
values += values[:1]
angles += angles[:1]
# 初始化极坐标系
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True))
# 绘制填充区域
ax.fill(angles, values, color='lightblue', alpha=0.7)
# 设置刻度和标签
plt.xticks(angles[:-1], categories)
plt.yticks(range(0, max(values)+10, 10), labels=[str(i) for i in range(0, max(values)+10, 10)])
# 添加标题
plt.title('Rose Diagram with Matplotlib')
# 显示图像
plt.show()
```
此方法利用了极坐标的特性来实现玫瑰图的效果[^1]。
---
#### 方法二:基于 `seaborn` 的间接方式
虽然 `seaborn` 并未直接提供玫瑰图的功能,但可以通过其强大的绘图能力配合 `matplotlib` 来完成类似的视觉效果。以下是一个例子:
```python
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# 构造数据
data = {'Category': ['A', 'B', 'C', 'D', 'E'],
'Value': [25, 15, 30, 10, 20]}
df = pd.DataFrame(data)
# 转换为适合极坐标的形式
N = len(df)
theta = np.arange(0., 2 * np.pi, 2 * np.pi / N)
radii = df['Value'].to_numpy()
# 创建子图并设置为极坐标模式
fig, ax = plt.subplots(subplot_kw={'projection': 'polar'}, figsize=(6, 6))
bars = ax.bar(theta, radii, width=0.4, bottom=0.0, tick_label=df['Category'])
# 自定义颜色和透明度
for r, bar in zip(radii, bars):
bar.set_facecolor(plt.cm.viridis(r / max(radii)))
bar.set_alpha(0.7)
# 添加标题
plt.title('Rose Diagram with Seaborn and Matplotlib')
# 展示图像
plt.show()
```
这种方法结合了 `seaborn` 的配色方案以及 `matplotlib` 的灵活性[^3]。
---
### 注意事项
- 玫瑰图通常用于展示周期性数据或者分类变量的比例关系。
- 如果需要更复杂的交互功能,可以考虑引入其他库如 `Plotly` 或者 `Bokeh`。
- 上述代码中的颜色、透明度等参数可以根据实际需求调整。
---
阅读全文
相关推荐
















