Подтвердить что ты не робот

Расположение цветовой шкалы

У меня есть сюжет matplotlib с цветовой шкалой. Я хочу расположить цветовую шкалу так, чтобы она была горизонтальной и находилась под моим графиком.

Я почти сделал это с помощью следующего:

plt.colorbar(orientation="horizontal",fraction=0.07,anchor=(1.0,0.0))

Но цветовая полоса все еще немного перекрывается с графиком (и надписями оси x). Я хочу переместить цветовую панель вниз, но не могу понять, как это сделать.

4b9b3361

Ответ 1

Лучший способ получить хороший контроль над позицией colorbar - дать ей свою собственную ось. Например:

# What I imagine your plotting looks like so far
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.plot(your_data)

# Now adding the colorbar
cbaxes = fig.add_axes([0.8, 0.1, 0.03, 0.8]) 
cb = plt.colorbar(ax1, cax = cbaxes)  

Числа в квадратных скобках add_axes относятся к [left, bottom, width, height], где координаты - это просто фракции, которые идут от 0 до 1 области графика.

Ответ 2

с использованием прокладки pad

Чтобы переместить цветную панель относительно подзаголовка, можно использовать аргумент pad для fig.colorbar.

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)

fig, ax = plt.subplots(figsize=(4,4))
im = ax.imshow(np.random.rand(11,16))
ax.set_xlabel("x label")

fig.colorbar(im, orientation="horizontal", pad=0.2)
plt.show()

введите описание изображения здесь

с использованием делителя осей

Можно использовать экземпляр make_axes_locatable для разделения осей и создания новых осей, которые идеально выровнены по графику изображения. Опять же, аргумент pad позволяет задать пространство между двумя осями.

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import numpy as np; np.random.seed(1)

fig, ax = plt.subplots(figsize=(4,4))
im = ax.imshow(np.random.rand(11,16))
ax.set_xlabel("x label")

divider = make_axes_locatable(ax)
cax = divider.new_vertical(size="5%", pad=0.7, pack_start=True)
fig.add_axes(cax)
fig.colorbar(im, cax=cax, orientation="horizontal")

plt.show()

введите описание изображения здесь

с использованием подзаголовков

Можно создать две строки подзаголовков, одну для изображения и одну для цветной панели. Затем, установив height_ratios как gridspec_kw={"height_ratios":[1, 0.05]} в создании фигуры, делает один из подзаголовков намного меньшим по высоте, чем другой, и этот небольшой подзабор может содержать цветную панель.

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)

fig, (ax, cax) = plt.subplots(nrows=2,figsize=(4,4), 
                  gridspec_kw={"height_ratios":[1, 0.05]})
im = ax.imshow(np.random.rand(11,16))
ax.set_xlabel("x label")

fig.colorbar(im, cax=cax, orientation="horizontal")

plt.show()

введите описание изображения здесь