在matplotlib中改变图形大小和格式

86

我想准确地获得4 x 3英寸大小的fig1,以tiff格式纠正下面的程序:

import matplotlib.pyplot as plt

list1 = [3,4,5,6,9,12]
list2 = [8,12,14,15,17,20]

plt.plot(list1, list2)
plt.savefig('fig1.png', dpi = 300)
plt.close()

将文件名中的扩展名从.png更改为.tif会创建真正的tiff图像吗? - golay
4个回答

159

如果您明确创建图形,可以设置图形大小

plt.figure(figsize=(3,4))

在调用plt.plot()之前,您需要设置图形大小。

要更改保存的图形格式,只需更改文件名中的扩展名即可。但是,我不知道是否有任何matplotlib后端支持tiff格式。


将文件名中的扩展名从.png更改为.tif会创建真正的tiff图像吗? - golay
1
正如我所写的,我不知道,但从其他答案的评论中看来,似乎不支持tiff。 - Francesco Montesano
9
记住在调用 plt.plot() 之前需要先调用 plt.figure(figsize=(3,4)) - hzitoun

65

在创建图形之前添加以下内容即可更改绘图的大小。

plt.rcParams["figure.figsize"] = [16,9]

4
这正是我需要在Jupyter Notebook中使用的,以使图形更宽的内容。 - Ivan Bilan
1
在Jupyter笔记本中工作 - pauli
1
我使用了这个方法,但我的图像被拉伸了,因为matplotlib没有为新的纵横比例调整内容。但是,如果我不保存而是在窗口上显示绘图,它就能工作。对此有什么线索吗? - Ramon Balthazar
请使用其他的宽高比(例如:4:3)并更新我。 - ghosh'.
这确实帮了我很多,但我在寻找有关rcParams如何工作的文档方面遇到了困难。 - bravosierra99
显示剩余2条评论

26
第一部分(显式设置输出大小)并不太难:
import matplotlib.pyplot as plt
list1 = [3,4,5,6,9,12]
list2 = [8,12,14,15,17,20]
fig = plt.figure(figsize=(4,3))
ax = fig.add_subplot(111)
ax.plot(list1, list2)
fig.savefig('fig1.png', dpi = 300)
fig.close()

但是在快速谷歌搜索matplotlib + tiff后,我并不确定matplotlib能够制作tiff图。有提到GDK后端可以做到。

一个选项是使用像imagemagick的convert这样的工具转换输出。

(另一个选项是等待真正的matplotlib专家出现并证明我错了;-)


如果您已经安装了GDK后端,您可以使用它来本地绘制tiff文件。可能需要安装一些依赖项。 - GWW
@GWW -- 我看到那个提到过,但我也看到了这个主题表明那是一种谎言。当然,这是一个旧的主题,所以可能已经被修复了。 - mgilson

24

如果你需要在创建之后改变图形大小,使用以下方法

fig = plt.figure()
fig.set_figheight(value_height)
fig.set_figwidth(value_width)

其中value_heightvalue_width以英寸为单位。对我来说,这是最实用的方式。


这只增加了数字,而不是包含它的窗口。 - roschach
2
matplotlib 有史以来最糟糕的 API 之一,问题是它是 Python 中唯一最易学习的工具。 - fedvasu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接