Форматирование метки для немецкого языка, то есть с точкой в ​​качестве разделителя тысяч и запятой в качестве десятичного разделителя - PullRequest
1 голос
/ 13 февраля 2020

Я хочу, чтобы мои метки были отформатированы в соответствии с немецким стилем, с запятой в качестве десятичного разделителя и точкой / точкой в ​​качестве разделителя тысяч. Следующий код работает для десятичного разделителя на оси 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()

Result of the above program via the reference below

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

Однако я хотел бы посмотреть метки оси y следующим образом: 1.000.000 (один миллион), 2.000 .000 (два миллиона) и др. c.

1 Ответ

1 голос
/ 13 февраля 2020

Вы не получаете ожидаемых результатов, потому что 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()

Вывод:

enter image description here

...