You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib 3.7.5兼容求助:双轴色标创建失败及弃用警告处理

解决方案

问题原因

Matplotlib 3.7.5中,重复调用plt.subplot(236)创建重叠轴时,旧轴axc会被自动移除(触发弃用警告),但你保留了axc的无效引用,导致colorbar认为它和ax不属于同一画布,抛出错误。Matplotlib 3.8.2优化了重叠轴处理逻辑,所以无此问题。

修复后的代码

通过fig.add_axes在同一位置创建两个轴,确保它们都归属当前画布:

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
r = np.random.randn(1000)
theta = np.random.randn(1000)

fig = plt.figure()

# 创建极坐标子图(位置236)
ax = plt.subplot(236, projection='polar')
ax.set(xticklabels=[], yticklabels=[])
ax.grid(False)

# 获取极坐标轴的位置,在同一位置添加笛卡尔坐标轴
ax_pos = ax.get_position()
axc = fig.add_axes(ax_pos)

# 计算直方图
hist, phi_edges, r_edges = np.histogram2d(theta, r, bins=50)
# 设置笛卡尔轴范围
axc.set_xlim(-r_edges[-1], r_edges[-1])
axc.set_ylim(-r_edges[-1], r_edges[-1])
# 隐藏笛卡尔轴的刻度和边框,避免遮挡
axc.set(xticklabels=[], yticklabels=[])
for spine in axc.spines.values():
    spine.set_visible(False)

# 绘制极坐标热力图
X, Y = np.meshgrid(phi_edges, r_edges)
pc = ax.pcolormesh(X, Y, hist.T)

# 为两个轴创建色标,此时两者同属一个画布
cbar = plt.colorbar(pc, ax=[axc, ax], location='right')
cbar.set_label("Counts", rotation=270, labelpad=15)

plt.show()

核心改动

  • 替换重复plt.subplot调用为fig.add_axes,基于已有轴的位置创建重叠轴,保证两个轴都关联到同一figure。
  • 隐藏笛卡尔轴的冗余元素,避免干扰极坐标图显示。
  • 同时消除了弃用警告和ValueError错误。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 01:41:17