matplotlib savefig()大小con

2024-04-20 00:54:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写了一个函数,它获取熊猫生成的数据帧并生成一个热图:

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(),最大化图形并用GUI按钮手动保存图形。

如何修复函数以便savefig()正确保存图形?我试着在pl.savefig()之前画一条这样的线来控制我的身材:

       pl.figure(figsize=....) 

但我最终得到了一些空图。编写matplotlib函数的正确方法是什么?它可以让我完全控制保存图形的操作?

更新为问题图示例:enter image description here


Tags: 函数图形citydflentimerangepl
3条回答

短:
你只需要在调用pl.figure(figsize=...)之前调用pl.colorbar(以及所有其他东西)

说明:
pl.figure创建一个新的图(具有给定的大小),所有pl.*方法都将在该图上执行以下操作。
所以pl.savefig只保存上次创建的图形,如果在前面的行中创建了一个新图形,则该图形为空。

我在savefig()之前添加了plt.tight_layout(),它解决了我的修剪问题。也许这对你也有帮助。

编辑:我还在开始处设置图形大小rcParams['figure.figsize'] = 40, 12(您可以设置自己的宽度和高度)

documentation中,可以添加一个dpi参数来设置分辨率。

savefig('foo.png', dpi=199)

相关问题 更多 >