使用matplotlib将两个不同的图形保存在不同的文件中

xj3cbfub  于 2023-05-23  发布在  其他
关注(0)|答案(2)|浏览(141)

这可能是显而易见的,但我不能这样做。我是Python的新手,最近开始使用matplotlib,所以我看不到问题。
我正在做以下工作:

  • 创建一个pandas.DataFrame
  • 制作直方图并保存为png文件
  • 创建DataFrame的新列
  • 制作该列直方图并保存为新的PNG文件

我得到的是两个具有相同图形的png文件:DataFrame直方图。(我记得MATLAB上有类似的问题,我花了时间才找到方法)
代码如下:

import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# Suppose 'housing' is a pandas.DataFrama with shape (20640, 11)

# Make a histogram of each column of housing data frame
housing.hist(bins=50, figsize=(20, 15))

# Save histogram as a file
os.makedirs('im', exist_ok=True)
plt.savefig('im/housing_hist.png')

# Create a new attribute which represent income category
housing["income_cat"] = pd.cut(housing["median_income"],
                               bins=[0., 1.5, 3.0, 4.5, 6., np.inf],
                               labels=[1, 2, 3, 4, 5])

# Create a histogram of income_cat
housing["income_cat"].hist()
plt.savefig('im/income_cat_hist.png')

我需要帮助来保存不同的文件。
谢谢你的时间。

alen0pnh

alen0pnh1#

从图形对象保存图形更可靠。在Python(以及最近版本的MATLAB)中,数字是一种特殊的数据类型。pandas hist函数返回一个轴或轴数组。
如果你只制作一个坐标轴,你可以使用figure属性来获取图形,然后调用savefig
这样的东西应该会起作用。

ax1 = housing.hist(bins=50, figsize=(20, 15))
ax1.figure.savefig('im/housing_hist.png')

如果你制作多个轴,你会得到一个numpy数组axes,你可以把它展平并得到它的第一个元素:

axs1 = housing.hist(bins=50, figsize=(20, 15))
axs1.ravel()[0].figure.savefig('im/housing_hist.png')

编辑:为了清楚起见,对于第二个图,您应该执行以下操作:

ax2 = housing["income_cat"].hist()
ax2.figure.savefig('im/income_cat_hist.png')
wwodge7n

wwodge7n2#

好吧,我认为解决方案是在每个plt.savefig('...')之后添加一个plt.clf()。我看到这篇文章得到它:
matplotlib.pyplot will not forget previous plots - how can I flush/refresh?
我希望你能给出更好的答案。

相关问题