我编写了一个函数,它获取Pandas生成的 Dataframe 并生成热图:
def drawHeatMap(df, city, province, collector, classtype, color, titleposy):
try:
thePlot = pl.matshow(df.values, cmap='PuBuGn')
pl.colorbar(thePlot, orientation='vertical')
aTitle = (classtype + ' Composition Changes Over Time in ' + city +
', ' + province + '\n' + collector + ' collector. ' + 'rs100')
pl.title(aTitle, x=0.5, y=titleposy, style='oblique', weight='bold')
pl.xlabel('Collection Time')
pl.xticks(range(len(df.columns)), df.columns, rotation=90)
pl.yticks(range(len(df.index)), df.index)
fileName = (classtype + '-' + city + '-'
+ province + '-' + collector + '.png')
pl.savefig(fileName)
except ZeroDivisionError:
errorMessage = ('No Data Avaiable for ' + city + ', ' + province +
' with ' + collector + ' collector.')
print errorMessage
我遇到的问题是,savefig()
将保存轴和图形修剪的图形。我必须使用show()
,最大化图形,并手动保存图形与图形用户界面按钮自己。
我如何修改函数,使savefig()
能够正确保存图形?我试着在pl.savefig()
前面放一行这样的代码来控制图形:
pl.figure(figsize=....)
但是我最终产生了一些空的图形。什么是编写matplotlib函数的正确方法,让我完全控制保存图形?
- 更新了问题图示例:**
- 更新了问题图示例:**
9条答案
按热度按时间vlf7wbxs1#
在文档中,您可以添加一个
dpi
参数来设置分辨率。q9rjltbz2#
我在
savefig()
之前添加了plt.tight_layout()
,它解决了我的修剪问题。也许它也会对你的有帮助。编辑:我还设置了图形大小在开始
rcParams['figure.figsize'] = 40, 12
(你可以设置自己的宽度和高度)am46iovg3#
您只需要在调用
pl.colorbar
(以及所有其他内容)之前 * 调用pl.figure(figsize=...)
pl.figure
创建一个 * new * 图形(具有给定的大小),所有pl.*
方法将在下面对其进行操作。因此
pl.savefig
只保存最后创建的图形,如果在前一行创建了新图形,则该图形为空。bnl4lu3b4#
在调用
pl.savefig(fileName)
之前执行plt.tight_layout()
b91juud35#
您需要同时使用
set_size_inches
函数和savefig
中的dpi
参数来定义保存的图形大小(以像素为单位)。1.通过
plt.gcf().set_size_inches(10, 5)
以英寸为单位设置图形的宽度和高度。1.保存
plt.savefig('filename.png', dpi=100)
时定义dpi
。dpi
表示“每英寸点数”。1.保存的图形宽度为1000(10x100),高度为500(5x100)。保存的图形大小为1000x500像素。
样本代码段:
7lrncoxx6#
命令
pl.figure()
生成一个新的matplotlib图形。图形大小在示例化时设置。您确实想设置图形大小,但您已经有了一个图形。因此您的思路是正确的,但请尝试以下操作:zyfwsgd67#
你可以使用dpi参数来设置savefig方法中每英寸点数的分辨率.所以你可以控制图形大小.例如,如果你使用以下代码:
100.png
300.png
bf1o4zei8#
按所需大小保存图形
wdebmtf29#
您可以将
bbox_inches='tight'
传递给savefig
它会变魔术的。