«Числа», показанные на оси 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](https://i.stack.imgur.com/I9eRa.png)