我正在使用matplotlib中的Pyplot在极坐标图中绘制一个大的温度矩阵(每个圆的r和θ)。到目前为止,一切都与我所做的工作正常:
space_theta = radians(linspace(0, 180, M))
space_r = arange(0, a, delta_r)
r, theta = meshgrid(space_theta, space_r)
fig, axes = plt.subplots(subplot_kw=dict(projection='polar'))
axes.contourf(r, theta, T[W-1]) #T[W-1] is the temperatures I want to plot (T is a 3D matrix, so T[W-1] is a matrix)
axes.set_thetamin(0)
axes.set_thetamax(180)
plt.show()
有了这个,我得到以下信息:
现在我唯一想做的就是添加一个颜色图例,以指示哪种颜色对应于哪种温度。它应该看起来像这样(仅关注图例):
我在多个网站上进行了搜索,但没有找到解决方法。每次用于绘制图形的方法都不同。我尝试使用colorbar()解决了每个人的问题,但遇到一个错误(“未找到可用于创建颜色条的可映射”)。
P.S .:如果可能,我想在颜色图例上显示最大值和最小值。
答案 0 :(得分:3)
您可以将plt.colorbar
的结果与axes.contourf
一起用作第一个参数。
您会发现默认颜色栏太大了。要shrink
使用shrink=.6
使其类似于轮廓图。现在,您会注意到它与绘图太近了。可以使用pad=0.08
进行调整。
请注意,numpy库具有许多功能与其他库相似的名称。为了明确说明您正在使用numpy函数,import numpy as np
是一个好习惯。
这是一个更完整的示例:
from matplotlib import pyplot as plt
import numpy as np
M = 100
a = 1
delta_r = 0.01
space_theta = np.radians(np.linspace(0, 180, M))
space_r = np.arange(0, a, delta_r)
T = np.random.uniform(-30, 40, M * len(space_r)).reshape((M, len(space_r)))
r, theta = np.meshgrid(space_theta, space_r)
fig, axes = plt.subplots(subplot_kw=dict(projection='polar'))
contourplot = axes.contourf(r, theta, T)
axes.set_thetamin(0)
axes.set_thetamax(180)
plt.colorbar(contourplot, shrink=.6, pad=0.08)
plt.show()