Настройка y-меток на вторичной оси y в matplotlib для форматирования до тысяч с запятой - PullRequest
1 голос
/ 17 апреля 2020

У меня проблемы с форматированием меток тиков на вторичной оси y в matplotlib. Я хотел бы отформатировать метки вторичной оси y, чтобы они включали запятые для разделения тысяч (например, 20 000 вместо 20000). При работе с единственной осью Y я обычно просто использую:

ax.get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))

, что работает именно так, как я намереваюсь. Однако всякий раз, когда я пытаюсь сделать то же самое на графике с вторичной осью Y, это просто не работает, на самом деле ничего не делает.

Пример (цифры / контекст не имеют смысла, просто чтобы показать минимальный рабочий пример):

import matplotlib.pyplot as plt, matplotlib as mpl, numpy as np

y = [k for k in range(240)]

def CtoF(x):
    return (x * 1.8 + 32) + 10000


def FtoC(x):
    return (x - 32) / 1.8

temperature = np.random.randn(len(y))
fig, ax = plt.subplots(constrained_layout=True, figsize=(10,5))

ax.plot(y, temperature)
ax.set_ylabel(r'$T\ [^oC]$')

secaxy = ax.secondary_yaxis('right', functions=(CtoF, FtoC))
secaxy.set_ylabel(r'$T\ [^oF]$ + 10000')
secaxy.get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))

plt.show()

Приведенный выше код не изменяет метки на вторичной оси Y, так как обычно это происходит, когда он применяется к графику с единственной осью y, он вообще ничего не делает и просто оставляет метки одинаковыми.

Некоторые другие вещи, которые я пробовал, которые также не работают, получают отдельно yticks, а затем вручную устанавливают метки следующим образом:

vals = secaxy.get_yticks()
secaxy.set_yticklabels(['{:,}'.format(x) for x in vals])

это также ничего не делает для вторичной оси y этикетки.

Буду признателен за любую помощь, как я могу это реализовать?

1 Ответ

1 голос
/ 18 апреля 2020
pip install matplotlib==3.2.1

Это должно решить вашу проблему.

...