38

Pandas から生成されたデータフレームを取得してヒートマップを生成する関数を作成しました。

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関数を作成する適切な方法は何ですか?

問題図の例で更新: ここに画像の説明を入力

4

7 に答える 7

25

ドキュメントから、引数を追加しdpiて解像度を設定できます。

savefig('foo.png', dpi=199)
于 2015-02-03T07:25:44.697 に答える
10

短い:電話をかけるに電話
する必要があります(および他のすべてのもの)pl.figure(figsize=...) pl.colorbar

説明:(指定されたサイズの)新しい
pl.figure図を作成します。この図では、すべてのメソッドが次のように機能します。 したがって、最後に作成した図を保存するだけです。前の行で新しい図を作成した場合は空になります。pl.*
pl.savefig

于 2012-10-25T17:05:20.803 に答える
5

pl.savefig(fileName) doを呼び出す前にplt.tight_layout()

于 2019-09-26T10:31:47.500 に答える
2

このコマンドpl.figure()は、新しい matplotlib Figure を作成します。Figure のサイズはインスタンス化時に設定されます。Figure のサイズを設定したいのですが、既に Figure があります。あなたは正しい軌道に乗っていましたが、代わりにこれを試してください:

def drawHeatMap(df, city, province, collector, classtype, color, titleposy):
    try:
        fig = pl.figure(figsize=(....))
        ax = fig.add_subplot(111)
        ax.matshow(df.values, cmap='PuBuGn')
        pl.colorbar()
        aTitle = classtype + ' Composition Changes Over Time in ' + city + ', ' + province + '\n' + collector + ' collector. ' + 'rs100'
        ax.set_title(aTitle, x=0.5, y=titleposy, style='oblique', weight='bold')
        ax.set_xlabel('Collection Time')
        ax.set_xticks(range(len(df.columns)), df.columns, rotation=90)
        ax.set_yticks(range(len(df.index)), df.index)
        fileName = classtype + '-' + city + '-' + province + '-' + collector + '.png'
        fig.savefig(fileName)
    except ZeroDivisionError:
        errorMessage = 'No Data Available for ' + city + ', ' + province + ' with ' + collector + ' collector.'
        print errorMessage
于 2012-10-25T17:04:23.763 に答える