[英]How to properly show a colorbar in a polar graph (contour plot of half a circle)?
我正在使用 matplotlib 中的 Pyplot 在极坐标图中绘制一个大的温度矩阵(对于圆的每个 r 和 theta)。 到目前为止,我所做的一切都很好:
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(),它为每个人解决了问题,但出现错误(“没有找到可用于创建颜色条的可映射对象”)。
PS:如果可能,我想在颜色图例上显示最大值和最小值。
您可以将plt.colorbar
与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()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.