matplotlib存储图()大小控件

cmssoen2  于 2023-02-13  发布在  其他
关注(0)|答案(9)|浏览(123)

我编写了一个函数,它获取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函数的正确方法,让我完全控制保存图形?

    • 更新了问题图示例:**
vlf7wbxs

vlf7wbxs1#

在文档中,您可以添加一个dpi参数来设置分辨率。

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

q9rjltbz2#

我在savefig()之前添加了plt.tight_layout(),它解决了我的修剪问题。也许它也会对你的有帮助。
编辑:我还设置了图形大小在开始rcParams['figure.figsize'] = 40, 12(你可以设置自己的宽度和高度)

am46iovg

am46iovg3#

    • 简称:**

您只需要在调用pl.colorbar(以及所有其他内容)之前 * 调用pl.figure(figsize=...)

    • 说明:**

pl.figure创建一个 * new * 图形(具有给定的大小),所有pl.*方法将在下面对其进行操作。
因此pl.savefig只保存最后创建的图形,如果在前一行创建了新图形,则该图形为空。

bnl4lu3b

bnl4lu3b4#

在调用pl.savefig(fileName)之前执行plt.tight_layout()

b91juud3

b91juud35#

您需要同时使用set_size_inches函数和savefig中的dpi参数来定义保存的图形大小(以像素为单位)。
1.通过plt.gcf().set_size_inches(10, 5)以英寸为单位设置图形的宽度和高度。
1.保存plt.savefig('filename.png', dpi=100)时定义dpidpi表示“每英寸点数”。
1.保存的图形宽度为1000(10x100),高度为500(5x100)。保存的图形大小为1000x500像素。
样本代码段:

import matplotlib.pyplot as plt

def fig_size():
    plt.plot(range(0, 10), range(0, 10))
    plt.gcf().set_size_inches(10, 5)
    plt.savefig('charts/fig_size.png', dpi=200)
7lrncoxx

7lrncoxx6#

命令pl.figure()生成一个新的matplotlib图形。图形大小在示例化时设置。您确实想设置图形大小,但您已经有了一个图形。因此您的思路是正确的,但请尝试以下操作:

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
zyfwsgd6

zyfwsgd67#

你可以使用dpi参数来设置savefig方法中每英寸点数的分辨率.所以你可以控制图形大小.例如,如果你使用以下代码:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({ 
    'ser1' : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] , 
    'ser2' : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
    })

df.plot()
plt.savefig("100.png" , dpi = 100)
plt.savefig("300.png" , dpi = 300)
  1. png将为:
    100.png
  2. png将为:
    300.png
bf1o4zei

bf1o4zei8#

按所需大小保存图形

figure = plt.gcf()
figure.set_size_inches(width/100, height/100)
plt.axis('off')
plt.plot(x, y, color='black', linewidth=1)
plt.gca().set_position([0, 0, 1, 1])  
plt.savefig("image.png", dpi=100)
wdebmtf2

wdebmtf29#

您可以将bbox_inches='tight'传递给savefig

plt.savefig("image.png", bbox_inches='tight')

它会变魔术的。

相关问题