fig, ax = plt.subplots(1, 2, subplot_kw=dict(projection='polar'))
ax[0].set_theta_zero_location("N")
ax[0].set_theta_direction(-1)
cax = ax[0].contourf(theta, r, values_2d,100)
cb = fig.colorbar(cax)
cb.set_label("Distance")
dax = ax[1].contourf(theta, r, d_values_2d,2)
db = fig.colorbar(dax)
db.set_label("Gradient")
plt.tight_layout(pad=0.4, w_pad=0.5)
plt.show()
上图有两个图。但是,我无法找到让colorbar
与每个人物坐在一起的方法。另外,它们的尺寸不同,为什么?
答案 0 :(得分:2)
您可以使用关键字Axes
将要附加颜色条的fig.colorbar()
实例传递到ax
。来自文档:
ax:Axes,Axes列表,可选
父轴,新颜色条轴的空间将被盗取。 如果给出了一个轴列表,它们将被调整大小以便为其腾出空间 色条轴。
另外,为了避免重叠,您可以传递关键字pad
。这里有一些改进的代码版本:
from matplotlib import pyplot as plt
import numpy as np
#the coordinates
theta = np.linspace(0,2*np.pi, 100)
r = np.linspace(0,1,100)
#making up some data
theta,r = np.meshgrid(theta,r)
values_2d = np.sin(theta)*np.exp(-r)
d_values_2d = np.cos(theta)*np.sqrt(r)
fig, ax = plt.subplots(
1, 2, subplot_kw=dict(projection='polar'),
figsize = (10,4)
)
ax[0].set_theta_zero_location("N")
ax[0].set_theta_direction(-1)
cax = ax[0].contourf(theta, r, values_2d,100)
#the first altered colorbar command
cb = fig.colorbar(cax, ax = ax[0], pad = 0.1)
cb.set_label("Distance")
dax = ax[1].contourf(theta, r, d_values_2d,2)
#the second altered colorbar command
db = fig.colorbar(dax, ax = ax[1], pad = 0.1)
db.set_label("Gradient")
plt.tight_layout(pad=0.4, w_pad=0.5)
plt.show()
至于为什么你得到原始代码所得的数字,我猜测如果没有ax
关键字,colorbar
必须猜测将颜色条放在哪里,它会使用当前活动的Axes实例或最后创建的实例。此外,由于两个颜色条都附加到相同的轴上,因此实际绘图的空间较小,这就是为什么示例中的右图比左图小的原因。