Неправильное расположение цветовой панели при использовании вложенных диаграмм (matplotlib)
Я хочу создать фигуру, состоящую из девяти подзаголовков. Я действительно ненавидел тот факт, что мне нужно было создать ax1-ax9 отдельно, поэтому я создал цикл for, чтобы сделать это. Однако, когда я хочу включить цветовую панель, цветовая панель располагается справа от последнего подзаголовка. Это также показано на следующем рисунке:
Что происходит не так и как я могу это исправить?
Изображение было сгенерировано со следующим кодом:
import numpy
import layout
import matplotlib.pylab as plt
data = numpy.random.random((10, 10))
test = ["ax1", "ax2", "ax3", "ax4", "ax5", "ax6", "ax7", "ax8", "ax9"]
fig = plt.figure(1)
for idx in range(len(test)):
vars()[test[idx]] = fig.add_subplot(3, 3, (idx + 1))
im = ax1.imshow(data)
plt.colorbar(im)
im2 = ax3.imshow(data)
plt.colorbar(im2)
plt.show()
3 ответа:
Colorbar принимает аргумент
ax
объект(ы) "родительские оси", из которого будет украдено пространство для новых осей colorbar."В вашем коде вы можете сделать что-то вроде этого, чтобы добавить цветную полосу рядом с осями an:im = ax1.imshow(data) plt.colorbar(im, ax = ax1)
Я нашел ответ на свой вопрос, в результате чего получилась правильная цветовая полоса и интервал между подзаголовками. Обратите внимание, что если расстояние между подзаголовком и цветовой полосой не имеет значения, ответ Молли правильный.
import numpy import layout import matplotlib.pylab as plt from mpl_toolkits.axes_grid1 import make_axes_locatable data = numpy.random.random((10, 10)) test = ["ax1", "ax2", "ax3", "ax4", "ax5", "ax6", "ax7", "ax8", "ax9"] fig = plt.figure(1) for idx in range(len(test)): vars()[test[idx]] = fig.add_subplot(3, 3, (idx + 1)) divider = make_axes_locatable(vars()[test[idx]]) vars()["c" + test[idx]] = divider.append_axes("right", size = "5%", pad = 0.05) im1 = ax1.imshow(data) plt.colorbar(im1, cax = cax1) im2 = ax2.imshow(data) plt.colorbar(im2, cax = cax2) im3 = ax3.imshow(data) plt.colorbar(im3, cax = cax3) im4 = ax4.imshow(data) plt.colorbar(im4, cax = cax4) im5 = ax5.imshow(data) plt.colorbar(im5, cax = cax5) im6 = ax6.imshow(data) plt.colorbar(im6, cax = cax6) im7 = ax7.imshow(data) plt.colorbar(im7, cax = cax7) im8 = ax8.imshow(data) plt.colorbar(im8, cax = cax8) im9 = ax9.imshow(data) plt.colorbar(im9, cax = cax9) plt.show()
Это приводит к следующему:
Ответ чувака великолепен. Однако я бы предпочел избежать копирования-вставки, используя это:
Результат тот же самый.import numpy import matplotlib.pylab as plt from mpl_toolkits.axes_grid1 import make_axes_locatable data = numpy.random.random((10, 10)) test = ["ax1", "ax2", "ax3", "ax4", "ax5", "ax6", "ax7", "ax8", "ax9"] fig = plt.figure(1) for idx in range(len(test)): vars()[test[idx]] = fig.add_subplot(3, 3, (idx + 1)) divider = make_axes_locatable(vars()[test[idx]]) vars()["c" + test[idx]] = divider.append_axes("right", size = "5%", pad = 0.05) vars()["im" + str(idx)] = vars()[test[idx]].imshow(data) plt.colorbar(vars()["im" + str(idx)], cax = vars()["c" + test[idx]]) plt.show()