Форматирование галочки для немецкого языка, т. Е. С точкой в ​​качестве разделителя тысяч и запятой в качестве десятичного разделителя.

Я хочу, чтобы мои галочки были отформатированы в соответствии с немецким стилем, с запятой в качестве десятичного разделителя и точкой/точкой в ​​качестве разделителя тысяч. Следующий код работает для десятичного разделителя по оси x, но ничего не делает для оси y.


import numpy as np
import matplotlib.pyplot as plt
import locale
# Set to German locale to get comma decimal separater
locale.setlocale(locale.LC_NUMERIC, "deu_deu")
plt.ticklabel_format(useLocale=True)

# evenly sampled time at 200ms intervals
t = np.arange(0., 2., 0.2)


# red dashes, blue squares and green triangles
plt.plot(t, 1000000*t, 'r--', t, 1000000*t**2, 'bs', t, 1000000*t**3, 'g^')
plt.show()

Результат вышеуказанной программы по ссылке ниже

В приведенном выше коде метки деления оси Y выглядят следующим образом: 1000000, 2000000, 3000000...

Однако я бы хотел, чтобы метки оси Y выглядели так: 1.000.000 (один миллион), 2.000.000 (два миллиона) и т. д.


person Stefan    schedule 13.02.2020    source источник


Ответы (1)


Вы не получаете ожидаемых результатов, потому что matplotlib по умолчанию не включает разделители тысяч. Обычно, если вы хотите, чтобы запятая разделяла тысячи, вам приходилось делать это вручную, и то же самое верно для десятичных знаков. Ниже приведен один из способов сделать это, адаптировав свой код и используя лямбда-функцию.

Код:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import locale
# Set to German locale to get comma decimal separater
locale.setlocale(locale.LC_NUMERIC, "deu_deu")

fig, ax = plt.subplots()

ax.ticklabel_format(useLocale=True)

# evenly sampled time at 200ms intervals
t = np.arange(0., 2., 0.2)

# Apply decimal-mark thousands separator formatting to y axis.
ax.get_yaxis().set_major_formatter(mpl.ticker.FuncFormatter(lambda x, loc: locale.format_string('%d', x, 1)))

# red dashes, blue squares and green triangles
ax.plot(t, 1000000*t, 'r--', t, 1000000*t**2, 'bs', t, 1000000*t**3, 'g^')
plt.show()

Вывод:

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

person CDJB    schedule 13.02.2020