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

如何为半圆形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()

原理说明

  1. 正确关联颜色条与目标绘图:contourf函数执行后会返回一个QuadContourSet对象,这个对象包含了绘图所用的色彩映射、数值区间等关键信息。将此对象传入fig.colorbar(),matplotlib会自动生成与原极坐标图匹配的颜色条,且不会干扰原轴的内容。
  2. 避免多余操作:原代码中的plt.figure(1)属于冗余操作,因为plt.subplots()已经创建了编号为1的画布,重复调用无实际作用,直接删除即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:18:18