#python #matplotlib #latex #pgf
#питон #matplotlib #Латекс #пгф
Вопрос:
Я пытаюсь создать тепловую карту на python с помощью matplotlib. Я буду использовать сгенерированную графику в latex, именно поэтому я сохраняю ее в формате .pgf. У меня есть метки по оси y различной длины, которые выровнены неправильно:
Мой Код:
matplotlib.use("pgf")
matplotlib.rcParams.update({
"pgf.texsystem": "pdflatex",
'font.family': 'serif',
'text.usetex': True,
'pgf.rcfonts': False,
'font.size': 6,
})
col_names = ["Bison", "Fox", "Black-Tailed Jackrabbit",
"Beaver", "African Elephant"]
corr_matrix = pd.DataFrame(np.random.randint(
0, 100, size=(5, 5)), columns=col_names)
fig = plt.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(corr_matrix, cmap='Blues', vmin=0, vmax=100)
fig.colorbar(cax)
ticks = np.arange(0, len(corr_matrix.columns), 1)
ax.set_xticks(ticks)
plt.xticks(rotation=90)
ax.set_yticks(ticks)
ax.set_xticklabels(corr_matrix.columns)
ax.set_yticklabels(corr_matrix.columns)
for (i, j), z in np.ndenumerate(corr_matrix):
ax.text(j, i, z, ha='center', va='center')
plt.savefig('heatmap.pgf', bbox_inches='tight')
Когда я показываю графику непосредственно с помощью plt.show(), выравнивание выполняется правильно:
Ответ №1:
Я нашел решение:
for lab in ax.yaxis.get_ticklabels():
lab.set_verticalalignment("center")
(Я не знаю, почему это точно работает, я почерпнул идею оттуда https://github.com/matplotlib/matplotlib/issues/4115 )