Почему не работает plt.savefig?
У меня есть простой код на Python, который выглядит следующим образом:
import numpy as np
import matplotlib.pyplot as plt
"""
Вот решения и график.
"""
# Создание осей и построение графика.
plt.axis([0, 10, 0, 10])
axis_x = range(1, 11)
grd = [1.1, 2.1, 3.1, 4.1, 5.1, 6.1, 7.1, 8.1, 9.1, 10.1]
grd2 = [1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 8.2, 9.2, 10.2]
plt.plot(axis_x, grd, '-g', label='BR1')
plt.plot(axis_x, grd2, '-b', label='BR2')
plt.legend(loc='upper left')
plt.grid()
plt.show()
# Сохранение вектора результатов в текстовый файл.
np.savetxt('test.out', (grd, grd2))
# Сохранение фигуры в файл формата '.eps'.
plt.savefig('expl.pdf', format='pdf', dpi=1200)
Когда я открываю выходные файлы expl.pdf
и/или test.out
, я обнаруживаю, что они пустые. Почему так получается?
Спасибо.
3 ответ(ов)
Когда вы закрываете изображение, отображаемое с помощью plt.show()
, изображение закрывается и освобождается из памяти.
Рекомендуется вызывать savefig
и savetxt
до вызова show
.
Я столкнулся с аналогичной проблемой, и решение было в том, чтобы поместить команду savefig
перед вызовом plt.show()
, при этом явно указав формат файла. Вот мой код:
plt.suptitle("~~~~")
plt.title("~~~~")
ax = sns.boxplot(x=scores_df.score, y=scores_df.response)
plt.savefig("test.png", format="png") # явно указываем формат файла
plt.show()
plt.close()
Это должно помочь сохранить график в нужном формате до его отображения.
Ваш график не может быть сгенерирован, поскольку вы определили список axis_x
, длина которого равна 9, в то время как grd
и grd2
имеют длину 10. Чтобы решить эту проблему, просто замените определение axis_x
на:
axis_x = range(1, 11)
После этой правки ваш график будет отображаться корректно и сохранится без проблем.
Как подогнать синусоиду к данным с помощью pylab и numpy?
Построение гистограммы на логарифмической шкале с помощью Matplotlib
Цветовой график 2D массива в matplotlib
Как извлечь частоту, связанную с FFT значениями в Python?
Преобразование байтового массива обратно в массив numpy