如何为半圆形Matplotlib极坐标图添加对应数值的ColorBar?
半圆形极坐标图添加颜色条的解决方案及原理
问题原因
你尝试用plt.imshow(v)+plt.colorbar()添加颜色条时,imshow会在当前极坐标轴上绘制新的笛卡尔坐标系图像,直接覆盖了原有的极坐标等高线图,导致原图表被修改。
修正后的完整代码
import numpy as np import matplotlib.pyplot as plt from math import sin, radians # 定义角度和半径范围 azimuths = np.radians(np.linspace(180, 360, 20)) zeniths = np.arange(0, 1000, 10) # 常量参数 v0 = 1 A = 2.4e-24 alpha = radians(10) n = 3 # 生成网格数据 r, theta = np.meshgrid(zeniths, azimuths) # 计算待绘制的数值v v = v0 - 2*A/(n+1) * (0.5*917*9.8 * sin(alpha))**n * r**(n+1) # 创建极坐标子图 fig, ax = plt.subplots(subplot_kw=dict(projection='polar')) # 设置极坐标为半圆形(180-360度) ax.set_thetamin(180) ax.set_thetamax(360) # 绘制等高线图并保存返回对象 contour_plot = ax.contourf(theta, r, v, cmap='coolwarm') # 基于等高线图对象创建颜色条 fig.colorbar(contour_plot, ax=ax) plt.show()
原理说明
- 正确关联颜色条与目标绘图:
contourf函数执行后会返回一个QuadContourSet对象,这个对象包含了绘图所用的色彩映射、数值区间等关键信息。将此对象传入fig.colorbar(),matplotlib会自动生成与原极坐标图匹配的颜色条,且不会干扰原轴的内容。 - 避免多余操作:原代码中的
plt.figure(1)属于冗余操作,因为plt.subplots()已经创建了编号为1的画布,重复调用无实际作用,直接删除即可。
内容的提问来源于stack exchange,提问作者Matte
相关产品推荐
相关产品推荐

