3 个子图中的 2 个上的水平颜色条
Horizontal colorbar over 2 of 3 subplots
有人知道如何优雅地在三个子图中的两个上绘制水平颜色条,并在第三个子图中绘制一个额外的水平颜色条。
理想情况下,颜色条应具有与相应图像轴相同的 x 维度。除了使用 matplotlib.gridspec
.
设置整个图像网格外,我没有找到任何好的解决方案
使用 mpl_toolkits.axes_grid1.ImageGrid
绘制单个颜色条效果非常好,但在尝试在三个轴中的两个轴上绘制颜色条时失败。
想法是使用 fig.add_axes
添加颜色条所在的轴。
这是一个例子:
import numpy as np
import matplotlib.pyplot as plt
matrix = np.random.random((10, 10, 3))
fig, ax = plt.subplots(1,3, figsize=(12, 3))
plt.subplots_adjust(left=0.05, right=0.85)
for i in range(3):
im = ax[i].imshow(matrix[:, :, i], interpolation='nearest')
ax[i].set_aspect("equal")
plt.draw()
p0 = ax[0].get_position().get_points().flatten()
p1 = ax[1].get_position().get_points().flatten()
p2 = ax[2].get_position().get_points().flatten()
ax_cbar = fig.add_axes([p0[0], 0, p1[2]-p0[0], 0.05])
plt.colorbar(im, cax=ax_cbar, orientation='horizontal')
ax_cbar1 = fig.add_axes([p2[0], 0, p2[2]-p2[0], 0.05])
plt.colorbar(im, cax=ax_cbar1, orientation='horizontal')
plt.show()
编辑:
fig.add_axes
的文档说:
Add an axes at position rect [left, bottom, width,
height] where all quantities are in fractions of figure
width and height.
所以要将颜色条放在图表的顶部,您只需将 bottom
参数更改为 1。
来自
ax_cbar = fig.add_axes([p0[0], 0, p1[2]-p0[0], 0.05])
ax_cbar1 = fig.add_axes([p2[0], 0, p2[2]-p2[0], 0.05])
到
ax_cbar = fig.add_axes([p0[0], 1, p1[2]-p0[0], 0.05])
ax_cbar1 = fig.add_axes([p2[0], 1, p2[2]-p2[0], 0.05])
有人知道如何优雅地在三个子图中的两个上绘制水平颜色条,并在第三个子图中绘制一个额外的水平颜色条。
理想情况下,颜色条应具有与相应图像轴相同的 x 维度。除了使用 matplotlib.gridspec
.
使用 mpl_toolkits.axes_grid1.ImageGrid
绘制单个颜色条效果非常好,但在尝试在三个轴中的两个轴上绘制颜色条时失败。
想法是使用 fig.add_axes
添加颜色条所在的轴。
这是一个例子:
import numpy as np
import matplotlib.pyplot as plt
matrix = np.random.random((10, 10, 3))
fig, ax = plt.subplots(1,3, figsize=(12, 3))
plt.subplots_adjust(left=0.05, right=0.85)
for i in range(3):
im = ax[i].imshow(matrix[:, :, i], interpolation='nearest')
ax[i].set_aspect("equal")
plt.draw()
p0 = ax[0].get_position().get_points().flatten()
p1 = ax[1].get_position().get_points().flatten()
p2 = ax[2].get_position().get_points().flatten()
ax_cbar = fig.add_axes([p0[0], 0, p1[2]-p0[0], 0.05])
plt.colorbar(im, cax=ax_cbar, orientation='horizontal')
ax_cbar1 = fig.add_axes([p2[0], 0, p2[2]-p2[0], 0.05])
plt.colorbar(im, cax=ax_cbar1, orientation='horizontal')
plt.show()
编辑:
fig.add_axes
的文档说:
Add an axes at position rect [left, bottom, width, height] where all quantities are in fractions of figure width and height.
所以要将颜色条放在图表的顶部,您只需将 bottom
参数更改为 1。
来自
ax_cbar = fig.add_axes([p0[0], 0, p1[2]-p0[0], 0.05])
ax_cbar1 = fig.add_axes([p2[0], 0, p2[2]-p2[0], 0.05])
到
ax_cbar = fig.add_axes([p0[0], 1, p1[2]-p0[0], 0.05])
ax_cbar1 = fig.add_axes([p2[0], 1, p2[2]-p2[0], 0.05])