Добавить цветную панель к существующей оси
Я делаю некоторые интерактивные сюжеты, и я хотел бы добавить легенду цветового бара. Я не хочу, чтобы colorbar был в своих собственных осях, поэтому я хочу добавить его к существующим осям. У меня возникают трудности с этим, так как большая часть кода примера, который я нашел, создает новые оси для colorbar.
Я пробовал следующий код с помощью matplotlib.colorbar.ColorbarBase
, который добавляет цветную панель к существующим осям, но это дает мне странные результаты, и я не могу понять, как указать атрибуты colorbar (например, где на оси размещены и какой размер)
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.cm import coolwarm
import numpy as np
x = np.random.uniform(1, 10, 10)
y = np.random.uniform(1, 10, 10)
v = np.random.uniform(1, 10, 10)
fig, ax = plt.subplots()
s = ax.scatter(x, y, c=v, cmap=coolwarm)
matplotlib.colorbar.ColorbarBase(ax=ax, cmap=coolwarm, values=sorted(v),
orientation="horizontal")
Использование fig.colorbar
вместо matplotlib.colorbar.ColorbarBase
по-прежнему не дает мне совершенно то, что я хочу, и я до сих пор не знаю, как настроить атрибуты colorbar.
fig.colorbar(s, ax=ax, cax=ax)
![введите описание изображения здесь]()
Скажем, я хочу иметь цветную панель в левом верхнем углу, растянувшись примерно на полпути в верхней части сюжета. Как мне это сделать?
Мне лучше написать пользовательскую функцию для этого, возможно, используя LineCollection
?
Ответы
Ответ 1
Цветная панель должна иметь свои собственные оси. Однако вы можете создать оси, которые перекрываются с предыдущей. Затем используйте cax
kwarg, чтобы сообщить fig.colorbar
использовать новые оси.
Например:
import numpy as np
import matplotlib.pyplot as plt
data = np.arange(100, 0, -1).reshape(10, 10)
fig, ax = plt.subplots()
cax = fig.add_axes([0.27, 0.8, 0.5, 0.05])
im = ax.imshow(data, cmap='gist_earth')
fig.colorbar(im, cax=cax, orientation='horizontal')
plt.show()
![введите описание изображения здесь]()
Ответ 2
Этот метод обычно используется для нескольких осей на фигуре. В этом контексте часто требуется иметь colorbar , который соответствует по размеру с результатом imshow. Это можно легко достичь с помощью набор осей сетки:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
data = np.arange(100, 0, -1).reshape(10, 10)
fig, ax = plt.subplots()
divider = make_axes_locatable(ax)
cax = divider.append_axes('right', size='5%', pad=0.05)
im = ax.imshow(data, cmap='bone')
fig.colorbar(im, cax=cax, orientation='vertical')
plt.show()
![Изображение с соответствующей цветной панелью размером]()