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
相关产品推荐
相关产品推荐

