前言
本篇博客主要解决在使用 pandas 绘制图像并保存时,由于标签太长,导致坐标轴上的标签显示不全的问题。刚遇到问题时调整了一下图片大小,然鹅并没有卵用,于是乎就检索了一下问题,发现没有解决 pandas 的。查询无果后,查看了一下官方文档,顿悟,这不就是 matplotlib 嘛,换了一个关键字再查询,果然,就是。所以本篇同样适用于解决 matplotlib 绘制图像时出现的这个问题。
# 部分代码 df_sparsity = distiller.weights_sparsity_summary(resnet20) df_sparsity_tmp = df_sparsity[['NNZ (dense)', 'NNZ (sparse)']] ax = df_sparsity_tmp.iloc[0:-1].plot(kind='bar', figsize=[30,10], title="Sparse vs. Dense\n(element-wise)") ax.set_xticklabels(df_sparsity.Name, rotation=90) fig = ax.get_figure() fig.savefig('output.png')
1. 问题描述
使用 pandas 的 DataFrame 存储数据并绘制图像,横坐标轴的标签是 ResNet20 的各个 layer 的名字,像 module.layer1.0.conv1.weight 这样,由于太长,导致绘制出来的图像是这样的:
坐标轴的标签没有显示全,于是就尝试改变图像的大小:
# 改变下高度 ax = df_sparsity_tmp.iloc[0:-1].plot(kind='bar', figsize=[30,50], title="Sparse vs. Dense\n(element-wise)")
于是图像就变成了下面这样,虽然有效果,但图片被拉长,依旧不美观:
2. 问题原因
既然调整绘制图像尺寸之后绘制出来的图片依旧不符合预期,那就只能看看官方的文档了---- pandas.DataFrame.plot() ,看看是不是还有其他参数,能够使图像的大小及位置不变,坐标轴的绘制空间适当调整。然后就发现了这个:
函数返回了一个 matplotlib.axes.Axes ,既然是 matlitplot ,那问题就很容易解决了, matplotlib 老搞这样的事。查看一下 matplotlib 的文档---- matplotlib.pyplot.savefig() ,可以看到:
默认情况下,仅保存图形给定的部分,如果设置为 tight ,将尝试保存更紧致的图形。
4. 解决方法
在保存图形是加入 bbox_inches 参数:
# 设置tight bbox fig.savefig('output.png', bbox_inches='tight')
再次保存图形,此时的就很ok了:
结束语
到此这篇关于Pandas Matplotlib保存图形时坐标轴标签太长导致显示不全问题解决的文章就介绍到这了,更多相关Pandas Matplotlib保存图形显示不全内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
查看更多关于Pandas Matplotlib保存图形时坐标轴标签太长导致显示不全问题的解决的详细内容...