Matplotlib FormatStrFormatter возвращает неправильные значения - PullRequest
0 голосов
/ 28 мая 2018

При попытке построить тепловую карту с помощью функции Seaborns sns.heatmap, я получаю неправильные отметки при форматировании оси X с FormatStrFormatter.После построения требуемого pivot data frame соответствующий код будет:

ax = sns.heatmap(oi_pivot_df, cmap=plt.cm.Spectral, cbar=True)
ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%.2f'))
ax.invert_yaxis()
ax.set_xlabel('moneyness')
ax.set_ylabel('time to maturity (years)')

fig = plt.gcf()
plt.tight_layout()

enter image description here

Здесь x изменяется в диапазоне от 0,5 до 96,5.Без форматера x-ticks - реальный диапазон:

enter image description here

Как мне изменить форматер так, чтобы он возвращал x тиков, отформатированных такчто я вижу только до первых 2 десятичных знаков, например, в моем примере ниже, ось х должна быть от 0,92 до 1,29.

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

У меня была точно такая же проблема.

Я пробовал:

ax.xaxis.set_major_formatter((ticker.StrMethodFormatter("{x:.3f}"))

ax.xaxis.set_major_formatter(ticker.FormatStrFormatter("%.3f"))

и многие другие ...

Независимо от того, что я делал, былобез эффекта В конце это работает:

df['col'] = df['col'].round(3)

Это округляет сами значения до 3 десятичных знаков.

0 голосов
/ 29 мая 2018

Seaborn использует FixedLocator и FixedFormatter.Если вы в одностороннем порядке измените форматер, ожидается, что результаты станут бесполезными.Если мотивация использовать Formatter состоит в том, чтобы сохранить фиксированные метки, но изменить количество десятичных знаков, простым решением может быть переформатирование существующих меток.

def fmt(s):
    try:
        n = "{:.2f}".format(float(s))
    except:
        n = ""
    return n

ax.set_xticklabels([fmt(label.get_text()) for label in ax.get_xticklabels()])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...