当尝试使用Seaborns sns.heatmap
函数绘制热图时,在使用FormatStrFormatter
格式化x轴时出现错误的刻度。构建所需的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()
这里,x在.5和96.5之间变化。没有格式化程序,x-ticks是真正的范围:
如何更改格式化程序,使其返回格式化的x刻度,以便我只能看到前2位小数,例如在下面的例子中,x轴应该从0.92到1.29。
答案 0 :(得分:1)
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()])
答案 1 :(得分:0)
我遇到了完全相同的问题。
我尝试过:
ax.xaxis.set_major_formatter((ticker.StrMethodFormatter("{x:.3f}"))
ax.xaxis.set_major_formatter(ticker.FormatStrFormatter("%.3f"))
还有更多...
无论我做什么,都没有效果 最后,这可行:
df['col'] = df['col'].round(3)
这会将值本身四舍五入到小数点后三位。