Как добавить настраиваемые тики в тепловую карту?

#python #matplotlib #seaborn #heatmap

#python #matplotlib #сиборн #тепловая карта

Вопрос:

Я построил массив в seaborn heatmap, и я хочу добавить ограничения по тикам к оси.

Мой код:

 # plot
eixoz = numpy.linspace(0, Z)
eixor = numpy.linspace(ra, R, nr)
eixox = D
numpy.meshgrid(eixoz, eixor)
ax = seaborn.heatmap(eixox)
ax.invert_yaxis()
plt.xlabel("Eixo z",  fontsize=20)
plt.ylabel("Eixo r", fontsize=20)
ax.get_xaxis().set_ticks([])
ax.get_yaxis().set_ticks([])
ax.collections[0].colorbar.set_label("Celsius", fontsize=20)
plt.show()
 

Как я могу добавить эти предельные тики синим цветом? А также, как я могу изменить размер номеров цветовых полос?

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

Ответ №1:

Размер меток цветовой панели можно изменить с помощью ax.collections[0].colorbar.ax.tick_params(labelsize=20) .

Текст в начале и в конце осей можно разместить с помощью axes преобразования, где 0 — левая (или нижняя), а 1 — правая (или верхняя) из осей. Отрицательные значения (или значения больше 1) пропорциональны вне области осей. Горизонтальные и вертикальные линии могут использовать одно и то же преобразование, но в отличие от текста должны clip_on=False быть нарисованы вне области осей.

 import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

sns.set()
len_eixoz = 20
eixox = np.repeat(np.arange(37.55, 37.66, 0.02), len_eixoz).reshape(-1, len_eixoz)
ax = sns.heatmap(eixox)
ax.invert_yaxis()
ax.set_xlabel("Eixo z", fontsize=20)
ax.set_ylabel("Eixo r", fontsize=20)
ax.get_xaxis().set_ticks([])
ax.get_yaxis().set_ticks([])
ax.collections[0].colorbar.set_label("Celsius", fontsize=20)
cbar = ax.collections[0].colorbar.ax.tick_params(labelsize=20)

x0, x1 = 1, 2
y0, y1 = 0, 1
ax.text(0, -0.07, x0, ha='center', va='top', fontsize=20, color='steelblue', transform=ax.transAxes)
ax.text(1, -0.07, x1, ha='center', va='top', fontsize=20, color='steelblue', transform=ax.transAxes)
ax.text(-0.05, 0, y0, ha='right', va='center', fontsize=20, color='steelblue', transform=ax.transAxes)
ax.text(-0.05, 1, y1, ha='right', va='center', fontsize=20, color='steelblue', transform=ax.transAxes)

ax.vlines([0, 1], [0, 0], [-0.06, -0.06], color='crimson', clip_on=False, transform=ax.transAxes)
ax.hlines([0, 1], [0, 0], [-0.04, -0.04], color='crimson', clip_on=False, transform=ax.transAxes)
plt.tight_layout()
plt.show()
 

пример графика

Обратите внимание, что вызов sns.set(font_scale=1.8) в начале приведет к масштабированию всех шрифтов.