Проблема не в линейном графике, а в тепловой карте, которая показывает тики в неправильных позициях [*].Вместо этого вы можете напрямую использовать сюжет matplotlib imshow, где все работает правильно.
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
data1 = np.random.random((10, 10))
data2 = np.random.random((10))
f, ax = plt.subplots(figsize=(11, 9))
plt.tick_params(bottom='on')
im = ax.imshow(data1, cmap=plt.get_cmap("Greens",5), aspect="auto")
f.colorbar(im)
ax2 = plt.twinx()
sns.lineplot(data=data2, linewidth=5, ax=ax2)
ax.axis('tight')
plt.show()
[*] По "неправильной позиции"Я имею в виду, что галочки не появляются в той позиции на осях, которую они, похоже, обозначают.Т.е. единицы измерения тиков не идентичны значениям, показанным на этикетках.
В случае, если тепловая карта отображается на ax
, печать
print(*ax.get_xticklabels())
приводит к
Text(0.5, 0, '0') Text(1.5, 0, '1') Text(2.5, 0, '2') Text(3.5, 0, '3') Text(4.5, 0, '4') Text(5.5, 0, '5') Text(6.5, 0, '6') Text(7.5, 0, '7') Text(8.5, 0, '8') Text(9.5, 0, '9')
Здесь вы можете видеть, что первая метка помечена позицией x=0.5
, но показывает '0'
в качестве метки.Т.е. все позиции смещены на 0,5 по сравнению с их метками.
В случае графика imshow
(после рисования графика f.canvas.draw()
) напечатанные метки имеют размер
Text(-2.0, 0, '-2') Text(0.0, 0, '0') Text(2.0, 0, '2') Text(4.0, 0, '4') Text(6.0, 0, '6') Text(8.0, 0, '8') Text(10.0, 0, '10')
Здесь метки и позиции совпадают.