具体问题
我正在尝试在seaborn热图中的单元格顶部打印数字.例如,类似:
ax = sns.heatmap(flights, annot=True, fmt=",")
(这直接取自seaborn‘s documentation,将其调整为对Python 3友好.因此,如果您导入seaborn,则可以直接使用相同的示例.)
这样会生成一个相当受人尊敬的数字,如下所示:
但是,我希望看到数字四舍五入到最接近的几百位.换句话说,我希望看到数字171表示为200,315表示为300,依此类推.
主意
在引擎盖下,seaborn实际上只是matplotlib.我可以使用matplotlib的text methods.
matplotlib的文本依赖于Python 3的text formatting,它通过将.2进行四舍五入到第***位***,而具有方便的方法来四舍五入到小数点右边,但是我找不到其他的要四舍五入的东西.方向.
我可以在将数字推送到绘图之前简单地四舍五入,但这实际上会更改绘图数据本身,我宁愿避免.因此,我希望保留传递给绘图的基础数字不变,同时仍然能够很好地打印内容.
据我所知,做到这一点的唯一方法是找到一种格式化事情的聪明方法.有办法吗?
谢谢!
更新资料
我进一步研究了seaborn‘s code,试图理解为什么La Rooy下面的巧妙解决方案对我不起作用.
seaborn代码中的相关行是:
val = ("{:" + self.fmt + "}").format(val)
但是,要使其正常工作,我将需要能够更改我的pandas数据框列,这意味着我需要能够调整nd.array元素的列.
因此,我暂时不再讨论这个问题,并希望一旦事情解决了,我将能够采用La Rooy的解决方案,并且事情应该可以进行.
一旦发生这种情况,解决方案将是:
>>> class rndarray(np.ndarray):
... def __format__(self, spec):
... return np.ndarray.__format__(int(round(self, -2)), spec)
...
>>> df[''] = map(rndarray, df['
或者,如果那不起作用,则:
>>> df[''].values = map(rndarray, df['