Сохранение двух разных фигур на разных файлах с помощью matplotlib - PullRequest
2 голосов
/ 04 марта 2020

Это может быть очевидно, но я не могу этого сделать. Я новичок в Python и недавно начал работать с matplotlib, поэтому не вижу проблемы.

Я делаю следующее:

  • создаем pandas .DataFrame
  • создание гистограммы и сохранение в виде файла png
  • создание нового столбца кадра данных
  • создание гистограммы этих столбцов и сохранение в виде нового файла 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')

Мне нужна помощь для сохранения разных файлов.

Спасибо за ваше время.

Ответы [ 2 ]

1 голос
/ 05 марта 2020

Надежнее сохранить фигуру из объекта фигуры. В Python (и MATLAB в более поздних версиях) цифры представляют собой определенный тип данных. Функция pandas hist возвращает оси или массив осей.

Если вы делаете одну ось, вы можете получить фигуру, используя свойство figure, а затем вызвать savefig из этого.

Так что-то подобное должно работать.

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

Если вы делаете несколько осей, вы получите массив массивов numpy, который вы можете просто сплющить и получить первый элемент:

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')
0 голосов
/ 06 марта 2020

Ну, я думаю, что решение добавляет plt.clf() после каждого plt.savefig('...'). Я видел этот пост, чтобы получить его:

matplotlib.pyplot не забудет предыдущие сюжеты - как я могу сбросить / refre sh?

Я был бы признателен лучше ответ, чем мой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...