You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Matplotlib绘制径向热力图?已实现ggplot2版本求对应方案

如何用Matplotlib实现径向热力图?

我明白你已经用ggplot2做出了径向热力图,现在想切换到Matplotlib来实现同款效果对吧?其实核心思路就是把常规的矩形热力图映射到极坐标系统里,我结合你给的示例数据来一步步演示:

首先,先回顾下你给出的示例数据生成代码,我们基于这个数据来改造:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 生成示例数据
df = pd.DataFrame(np.random.uniform(-1, 1, (24,12)))
df.columns = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

接下来就是关键的径向热力图实现步骤:

1. 创建极坐标画布与坐标轴

我们需要创建一个极坐标的轴,这里要调整角度的起始位置和方向,让它更贴合月份的展示逻辑(从顶部开始顺时针旋转):

fig, ax = plt.subplots(figsize=(8,8), subplot_kw={'projection': 'polar'})
# 设置角度从顶部(正北方向)开始
ax.set_theta_zero_location('N')
# 设置角度顺时针旋转
ax.set_theta_direction(-1)

2. 映射数据到极坐标

把DataFrame的行(24个时段)对应极坐标的半径,列(12个月份)对应角度,先准备好网格数据:

# 生成12个月份对应的角度(360°均分)
theta = np.linspace(0, 2*np.pi, len(df.columns), endpoint=False)
# 生成半径的边界值(对应24行数据的上下边界)
r = np.arange(0, len(df)+1)

# 将DataFrame数据转为numpy数组
data = df.values

pcolormesh函数绘制热力图,它支持直接在极坐标轴上渲染:

# 绘制径向热力图,使用和你示例一致的coolwarm配色
pcm = ax.pcolormesh(theta, r, data, cmap='coolwarm')

3. 调整标签与样式

最后优化图表的可读性,把月份标签、半径刻度调整到合适位置:

# 设置月份角度标签
ax.set_xticks(theta)
ax.set_xticklabels(df.columns)

# 设置半径刻度(按间隔显示,避免过于密集)
ax.set_yticks(np.arange(1, len(df)+1, 4))
ax.set_yticklabels(np.arange(1, len(df)+1, 4))

# 添加颜色条(如果不需要可以注释掉这一行)
plt.colorbar(pcm, ax=ax, shrink=0.7)

# 调整布局防止标签被截断
plt.tight_layout()
plt.show()

这样就能得到和ggplot2风格一致的径向热力图了!如果需要细化细节(比如颜色范围、标签大小、网格线样式),可以通过vmin/vmaxax.tick_params()等参数进一步调整。

内容的提问来源于stack exchange,提问作者scientific_explorer

火山引擎 最新活动