我有一个连续三个轴的图形。此行中的每个轴都显示一些数据,从而在三个子图中共享x和y轴范围。
颜色表示某个标签,该标签应显示在最后一个子图右侧的颜色栏中。
几乎创建我想要的东西的最小示例如下:
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.axes_grid1 import make_axes_locatable
fig = plt.figure(1)
ax1 = fig.add_subplot(131)
ax2 = fig.add_subplot(132, sharex=ax1, sharey=ax1)
ax3 = fig.add_subplot(133, sharex=ax1, sharey=ax1)
#set aspect ratio for three axes
ax1.set_aspect("equal")
ax2.set_aspect("equal")
ax3.set_aspect("equal")
#define colors and plot some dummy data
class_colors = ["#e74c3c", "#3498db", "#34495e", "#9b59b6", "#2ecc71", "#95a5a6"]
ax1.plot([0,1,2,3,4], [4,3,2,1,0], "D", markeredgecolor=class_colors[0])
ax2.plot([0,1,2,3,4], 1.2*np.array([4,3,2,1,0]), "D", markeredgecolor=class_colors[2])
ax3.plot([0,1,2,3,4], 1.3*np.array([4,3,2,1,0]), "D", markeredgecolor=class_colors[3])
ax3.plot(0.75*np.array([0,1,2,3,4]), 0.89*np.array([4,3,2,1,0]), "D", markeredgecolor=class_colors[4])
#define the color bar
cmap = matplotlib.colors.ListedColormap(class_colors)
bounds = np.linspace(0, 6, 6 + 1)
norm = matplotlib.colors.BoundaryNorm(bounds, cmap.N)
divider = make_axes_locatable(ax3)
cax1 = divider.append_axes("right", size="5%", pad=0.05)
cb = matplotlib.colorbar.ColorbarBase(cax1, cmap=cmap, norm=norm)
cb_ticks_loc = np.arange(0.5, 6, 1)
cb.set_ticks(cb_ticks_loc)
cb.set_ticklabels(["Firefly", "Dragon", "Aligator", "Dog", "Pig", "Stat"])
plt.show()
我使用建议使用的append_axes
方法,例如here。
但是,生成的图看起来像这样:
注意最后一个图比其他图略小!
我的问题是:如何避免这种情况?我希望所有图都具有相同的大小,并在颜色栏的末尾添加一些额外的空间。