如何使用Matplotlib保存由ggplot生成的图像?

3

虽然这一部分有效

import matplotlib.pyplot as plt
from ggplot import *
import numpy as np
import pandas as pd

df = pd.DataFrame({'Height':np.random.randn(10),
                   'Weight':np.random.randn(10),
                   'Gender': ["Male","Male","Male","Male","Male",
                              "Female","Female","Female","Female","Female"]})
p=ggplot(aes(x='Height', y='Weight', color='Gender'), data=df)  + geom_point()
p.make()
fig = plt.gcf()
ax = plt.gca()
fig.set_figwidth(25, forward=True)
plt.show()

当我尝试保存图片时,它失败了,生成了一张空白的图片。

plt.savefig("image.tiff", dpi=300)

有什么想法吗?谢谢!

尝试使用序列plt.savefig("image.tiff", bbox_inches='tight')保存图像,然后尝试使用plt.show()和plt.close()。 - user2510479
这可能是由于这个问题引起的,该问题在这里有所提及。一个解决方法总是将其保存为png并使用外部程序转换为tiff。 - ImportanceOfBeingErnest
3个回答

0

你尝试过使用 ggsave(plot = p, filename = 'image.tiff') 或者 p.save('image.tiff') 吗?

编辑 ggplot中已经移除了ggsave,请使用第二种解决方案。


ggsave在ggplot中不可用,而p.save忽略了我使用fig.set_figwidth(25, forward=True)指定的新宽度。 - teddy browns
p.save(filename, width=None, height=None, dpi=180) - Astrom
谢谢。我想要的是“屏幕上”和“文件中”的图像大小保持一致。使用p.save,我可以保存所需宽度的图像,但问题在于在显示时该图像仍将保留在一个4x4的小框中。 - teddy browns
你可以试试这个代码:import matplotlib as mpl,然后 mpl.rcParams["figure.figsize"] = "11, 8" - Astrom

0

我使用 ggplot 对象 save 方法成功将图形保存到文件中。以下是一个示例:

p.save('image.tiff', width=12, height=8, dpi=144)

更多信息,请参见this SO响应中@Johan的评论,找到源代码here,或在here找到ggplot | docs中的示例。

就屏幕大小设置而言,似乎无法使用当前的API实现。一个可能的解决方法是克隆存储库并修改line 624为以下内容:

self.fig, self.subplots = plt.subplots(subplot_kw=subplot_kw, figsize=(my_x, my_y)

其中my_x和my_y是您想要在屏幕上显示的x和y尺寸。然后使用show方法:

p.show()

谢谢。我想要的是屏幕上和文件中图片大小一致。使用p.save,我可以保存所需宽度的图像,但问题在于在显示时该图像仍将保持在一个微小的4x4框中。 - teddy browns
我并不清楚屏幕尺寸是否可以轻松设置。我刚刚编辑了我的回复,包括一个可能的解决方法。 - mgig
FYI,此选项即将消失 _savefig() 函数出现了意外的关键字参数“width”,该参数自3.3版本起不再受支持,并将在3.6版本中成为错误_。 - Richard Erickson

0
感谢所有的评论 - 这就是最终起作用的方法。代码有点重复,但最终还是能够运行。
import matplotlib.pyplot as plt
from ggplot import *
import numpy as np
import pandas as pd

df = pd.DataFrame({'Height':np.random.randn(10),
                   'Weight':np.random.randn(10),
                   'Gender': ["Male","Male","Male","Male","Male",
                              "Female","Female","Female","Female","Female"]})
p=ggplot(aes(x='Height', y='Weight', color='Gender'), data=df)  + geom_point()
p.make()
fig = plt.gcf()
ax = plt.gca()

w,h=25,10 #set width and height for both screen and file size

#this part prints on screen the chart
fig.set_figwidth(w, forward=True)  #screen
fig.set_figheight(h, forward=True) #screen
plt.show()

#this part saves it to file
p.save(filename, width=w, height=h, dpi=300) #file

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