Выровняйте отметки по оси X в общих подотчетах тепловой карты и линейных графиков, используя Seaborn и Matplotlib - PullRequest
1 голос
/ 06 апреля 2020

Построение тепловой карты и линейного графика с использованием Seaborn с общей осью X, отметки тепловой карты размещаются в середине столбцов тепловой карты.

Следовательно, нижний линейный график будет наследовать положение тиков тепловой карты и метки, не отражая истинные данные, так как тики линейного графика должны начинаться с нуля.

Другими словами, мне нужно либо сдвинуть тики обоих графиков, чтобы начать с начала оси x ( оптимально) или сместите линейный график вправо на половину ширины ячейки тепловой карты, сохраняя места для отметок и метки (хаки).

Приведенный ниже код быстро воспроизводит проблему:

f,[ax_heat,ax_line]=plt.subplots(nrows=2,figsize=(10, 8),sharex=True)

data_heat = np.random.rand(4, 6)
data_line= np.random.randn(6,1)

sb.heatmap(data=data_heat,robust=True, center=0,cbar=False, ax=ax_heat)
sb.lineplot(data=data_line, ax=ax_line)

вспомогательных участков тепловой карты и лине-участка со смещенными галочками линейного графика

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Это хакерское решение, но вы можете сместить оси X влево на половину ширины:

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

f,[ax_heat,ax_line]=plt.subplots(nrows=2,figsize=(10, 8),sharex=True)

data_heat = np.random.rand(4, 6)
data_line = np.random.randn(6,1)

# generalizable code regardless of spacing:
ax = sb.heatmap(data=data_heat,robust=True, center=0,cbar=False, ax=ax_heat)
width = ax.get_xticks()[1] - ax.get_xticks()[0]
new_ax = ax.get_xticks() - 0.5*width
ax.set_xticks(new_ax)
sb.lineplot(data=data_line, ax=ax_line)
plt.show()

enter image description here

1 голос
/ 06 апреля 2020

Чтобы сдвинуть тики обоих графиков, чтобы начать с начала оси x, просто добавьте эту строку в конце вашего кода:

plt.xticks(plt.xticks()[0] - 0.5)

Объяснение:

plt.xticks() возвращает местоположения и метки x-tick, поэтому мы можем получить доступ к местоположениям путем индексации с помощью [0]. Оказывается, это просто список последовательных целочисленных значений, поэтому мы можем сместить их на половину уровня влево, вычитая 0,5.

(частично скопирован из моего ответа на другой вопрос )

...