[英]matplotlib savefig() size control
我编写了一个函数,该函数采用从 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 函数的正确方法是什么,让我可以完全控制保存图形?
更新为问题图示例:
我在plt.tight_layout()
之前添加了 plt.tight_layout savefig()
,它解决了我遇到的修剪问题。 也许它也会对你有所帮助。
编辑:我还在rcParams['figure.figsize'] = 40, 12
设置了图形大小(您可以设置自己的宽度和高度)
从文档中,您可以添加一个dpi
参数来设置分辨率。
savefig('foo.png', dpi=199)
短的:
您只需要在调用pl.colorbar
(以及所有其他内容)之前调用pl.figure(figsize=...)
)
解释:
pl.figure
创建一个新图形(具有给定大小),所有pl.*
方法都将在其上执行以下操作。
所以pl.savefig
只是保存最后创建的图形,如果您在前面的行中创建了一个新图形,则该图形为空。
在调用pl.savefig(fileName)
之前做plt.tight_layout()
命令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
您可以使用 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)
100.png 将是:
300.png 将是:
保存所需尺寸的图形
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)
您需要一起使用set_size_inches
函数和savefig
中的dpi
参数来定义保存的图形大小(以像素为单位)。
plt.gcf().set_size_inches(10, 5)
以英寸为单位设置图形宽度和高度。dpi
plt.savefig('filename.png', dpi=100)
。 dpi
的意思是“每英寸点数”。示例代码片段:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.