Используйте локаль с морским рожком - PullRequest
0 голосов
/ 01 октября 2018

В настоящее время я пытаюсь визуализировать некоторые данные, над которыми я работаю с seaborn.Мне нужно использовать запятую в качестве десятичного разделителя, поэтому я подумал о том, чтобы просто изменить локаль.Я нашел этот ответ на аналогичный вопрос, который устанавливает языковой стандарт и использует matplotlib для построения некоторых данных.

Это также работает для меня, но при использовании seaborn вместо matplotlib напрямую это небольше не использую локаль.К сожалению, я не могу найти какие-либо настройки, чтобы изменить в Seaborn или любой другой обходной путь.Есть ли способ?

Вот некоторые примерные данные.Обратите внимание, что мне пришлось использовать 'german' вместо "de_DE".Все xlabels используют стандартную точку в качестве десятичного разделителя.

import locale
# Set to German locale to get comma decimal separator
locale.setlocale(locale.LC_NUMERIC, 'german')

import pandas as pd
import seaborn as sns

import matplotlib.pyplot as plt
# Tell matplotlib to use the locale we set above
plt.rcParams['axes.formatter.use_locale'] = True

df = pd.DataFrame([[1,2,3],[4,5,6]]).T
df.columns = [0.3,0.7]

sns.boxplot(data=df)

Exemplary boxplot with seaborn

1 Ответ

0 голосов
/ 01 октября 2018

«Числа», показанные на оси x для таких коробочных графиков, определяются с помощью matplotlib.ticker.FixedFormatter (узнайте с помощью print(ax.xaxis.get_major_formatter())).Этот фиксированный форматер просто ставит метки на галочки один за другим из списка меток.Это имеет смысл, потому что ваши ящики расположены на 0 и 1, но вы хотите, чтобы они были помечены как 0.3, 0.7.Я полагаю, что эта концепция становится более понятной, когда мы думаем о том, что должно произойти для фрейма данных с df.columns=["apple","banana"].

Так что FixedFormatter игнорирует локаль, потому что он просто принимает метки такими, какие они есть.Решение, которое я бы предложил здесь (хотя некоторые из них в комментариях одинаково действительны), заключается в том, чтобы самостоятельно форматировать метки.

ax.set_xticklabels(["{:n}".format(l) for l in df.columns]) 

Формат n здесь такой же, как обычный g, но учитывает локаль.(См. мини-язык формата Python ).Конечно, использование любого другого формата выбора также возможно.Также обратите внимание, что установка меток здесь с помощью ax.set_xticklabels работает только из-за фиксированных местоположений, используемых boxplot.Для других типов графиков с непрерывными осями это не рекомендуется, и вместо этого следует использовать понятия из связанных ответов.

Полный код:

import locale
# Set to German locale to get comma decimal separator
locale.setlocale(locale.LC_NUMERIC, 'german')

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.DataFrame([[1,2,3],[4,5,6]]).T
df.columns = [0.3,0.7]

ax = sns.boxplot(data=df)
ax.set_xticklabels(["{:n}".format(l) for l in df.columns])

plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...