我想知道是否有可能有一个子图,其中混合了使用 plot() 绘制的图形和使用 pcolormesh() 绘制的图形,它们具有相同的 x 轴长度。
当 x 轴长度相同时,当 pcolormesh() 子图没有绘制颜色条时,我附上了 2 张图片 以及当 pcolormesh() 子图缩小以容纳颜色条时具有颜色条的一个。
我想要颜色条,但它应该扩展整个图的长度而不是缩小子图。
如果不对任何当前类进行子类化,这是否可能?
最佳答案
当然,这是可能的!
正在发生的事情是为颜色条创建了一个新轴,并且空间是从绘制 pcolormesh
的轴中获取的。如果你不希望这种情况发生,你可以为要进入的颜色条指定一个坐标区对象。或者,您可以只使用水平颜色条。
无论如何,让我们用独立数据重现您的问题:
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(1977)
# Generate some interesting-looking random data...
num = 200
grid = np.random.normal(0, 1, (20, num)).cumsum(axis=1).cumsum(axis=0)
x = np.linspace(0, 360, num)
y1 = np.random.normal(0, 1, num).cumsum()
y2 = np.random.normal(0, 1, num).cumsum()
# Plot on three seperate axes
fig, axes = plt.subplots(nrows=3, sharex=True)
axes[0].plot(x, y1)
axes[1].plot(x, y2)
im = axes[2].imshow(grid, extent=[0, 360, 0, 20], aspect='auto')
fig.colorbar(im)
plt.show()
一个快速的解决方法是只使用水平颜色条:
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(1977)
# Generate some interesting-looking random data...
num = 200
grid = np.random.normal(0, 1, (20, num)).cumsum(axis=1).cumsum(axis=0)
x = np.linspace(0, 360, num)
y1 = np.random.normal(0, 1, num).cumsum()
y2 = np.random.normal(0, 1, num).cumsum()
# Plot on three seperate axes
fig, axes = plt.subplots(nrows=3, sharex=True)
axes[0].plot(x, y1)
axes[1].plot(x, y2)
im = axes[2].imshow(grid, extent=[0, 360, 0, 20], aspect='auto')
fig.colorbar(im, orientation='horizontal')
plt.show()
或者,您可以手动为颜色条添加另一个轴。我们还将稍微调整一下以腾出更多空间。
(旁注:在制作额外的轴后不要使用tight_layout
。一旦我们添加了额外的轴,我们就不再使用漂亮的子图网格,所以tight_layout
将无法正常工作。之前使用它是安全的,尽管在这种情况下您可能需要修改对 subplots_adjust
的调用。)
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(1977)
# Generate some interesting-looking random data...
num = 200
grid = np.random.normal(0, 1, (20, num)).cumsum(axis=1).cumsum(axis=0)
x = np.linspace(0, 360, num)
y1 = np.random.normal(0, 1, num).cumsum()
y2 = np.random.normal(0, 1, num).cumsum()
# Plot on three seperate axes
fig, axes = plt.subplots(nrows=3, sharex=True)
axes[0].plot(x, y1)
axes[1].plot(x, y2)
im = axes[2].imshow(grid, extent=[0, 360, 0, 20], aspect='auto')
# Make some room for the colorbar
fig.subplots_adjust(left=0.07, right=0.87)
# Add the colorbar outside...
box = axes[2].get_position()
pad, width = 0.02, 0.02
cax = fig.add_axes([box.xmax + pad, box.ymin, width, box.height])
fig.colorbar(im, cax=cax)
plt.show()
关于python - Matplotlib 将带有 plot 和 pcolor(mesh) 的子图混合在一起,以便在 colorbar 打开时具有相同的 x 轴长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23477775/