如何在极坐标图中正确显示颜色条(半圆的轮廓图)?

时间:2019-12-25 18:44:52

标签: python matplotlib graph

我正在使用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()

有了这个,我得到以下信息:

enter image description here

现在我唯一想做的就是添加一个颜色图例,以指示哪种颜色对应于哪种温度。它应该看起来像这样(仅关注图例):

enter image description here

我在多个网站上进行了搜索,但没有找到解决方法。每次用于绘制图形的方法都不同。我尝试使用colorbar()解决了每个人的问题,但遇到一个错误(“未找到可用于创建颜色条的可映射”)。

P.S .:如果可能,我想在颜色图例上显示最大值和最小值。

1 个答案:

答案 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()

example plot