繁体   English   中英

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

[英]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.colorbarplt.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM