Подтвердить что ты не робот

Как сделать pylab.savefig() сохранить изображение для "максимизированного" окна вместо размера по умолчанию

Я использую pylab в matplotlib для создания графика и сохранения графика в файл изображения. Однако, когда я сохраняю изображение с помощью pylab.savefig( image_name ), я обнаружил, что сохраненное изображение SIZE совпадает с изображением, которое отображается, когда я использую pylab.show().

Как это бывает, у меня много данных в сюжете, и когда я использую pylab.show(), я должен максимизировать окно, прежде чем я смогу увидеть весь график правильно, а тикеры xlabel не накладываются на друг друга.

В любом случае, я могу программно "максимизировать" окно перед сохранением изображения в файл? - на данный момент я получаю только изображение размера окна по умолчанию, что приводит к тому, что метки оси x накладываются друг на друга.

4b9b3361

Ответ 1

Вы устанавливаете размер при инициализации:

fig2 = matplotlib.pyplot.figure(figsize=(8.0, 5.0)) # in inches!

Edit

Если проблема связана с тиками x-axis - вы можете установить их "вручную":

fig2.add_subplot(111).set_xticks(arange(1,3,0.5)) # You can actually compute the interval You need - and substitute here

И так далее с другими аспектами вашего заговора. Вы можете настроить все это. Вот пример:

from numpy import arange
import matplotlib
# import matplotlib as mpl
import matplotlib.pyplot
# import matplotlib.pyplot as plt

x1 = [1,2,3]
y1 = [4,5,6]
x2 = [1,2,3]
y2 = [5,5,5]

# initialization
fig2 = matplotlib.pyplot.figure(figsize=(8.0, 5.0)) # The size of the figure is specified as (width, height) in inches

# lines:
l1 = fig2.add_subplot(111).plot(x1,y1, label=r"Text $formula$", "r-", lw=2)
l2 = fig2.add_subplot(111).plot(x2,y2, label=r"$legend2$" ,"g--", lw=3)
fig2.add_subplot(111).legend((l1,l2), loc=0)

# axes:
fig2.add_subplot(111).grid(True)
fig2.add_subplot(111).set_xticks(arange(1,3,0.5))
fig2.add_subplot(111).axis(xmin=3, xmax=6) # there're also ymin, ymax
fig2.add_subplot(111).axis([0,4,3,6]) # all!
fig2.add_subplot(111).set_xlim([0,4])
fig2.add_subplot(111).set_ylim([3,6])

# labels:
fig2.add_subplot(111).set_xlabel(r"x $2^2$", fontsize=15, color = "r")
fig2.add_subplot(111).set_ylabel(r"y $2^2$")
fig2.add_subplot(111).set_title(r"title $6^4$")
fig2.add_subplot(111).text(2, 5.5, r"an equation: $E=mc^2$", fontsize=15, color = "y")
fig2.add_subplot(111).text(3, 2, unicode('f\374r', 'latin-1'))

# saving:
fig2.savefig("fig2.png")

Итак - что именно вы хотите настроить?

Ответ 2

В matplotlib (pylab) есть два основных параметра для управления размером изображения:

  • Вы можете установить размер полученного изображения в дюймах
  • Вы можете определить DPI (точек на дюйм) для выходного файла (в основном, это разрешение).

Обычно вы хотели бы сделать то и другое, потому что таким образом у вас будет полный контроль по размеру полученного изображения в пикселях. Например, если вы хотите отображать ровно изображение 800x600, вы можете использовать DPI = 100 и установить размер как 8 x 6 дюймов:

import matplotlib.pyplot as plt
# plot whatever you need...
# now, before saving to file:
figure = plt.gcf() # get current figure
figure.set_size_inches(8, 6)
# when saving, specify the DPI
plt.savefig("myplot.png", dpi = 100)

Можно использовать любой DPI. Фактически, вы можете играть с различными значениями DPI и размера, чтобы получить наиболее понравившийся результат. Остерегайтесь, однако, что использование очень маленького DPI не является хорошей идеей, потому что matplotlib не может найти хороший шрифт для визуализации легенды и другого текста. Например, вы не можете установить DPI = 1, потому что нет шрифтов с символами, отображаемыми с 1 пикселем:)

Из других комментариев я понял, что у другой проблемы есть правильный перевод текста. Для этого вы также можете изменить размер шрифта. Например, вы можете использовать 6 пикселей на символ вместо 12 пикселей на символ, используемый по умолчанию (фактически, делая весь текст вдвое меньше).

import matplotlib
#...
matplotlib.rc('font', size=6)

Наконец, некоторые ссылки на оригинальную документацию: http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.savefig, http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.gcf, http://matplotlib.sourceforge.net/api/figure_api.html#matplotlib.figure.Figure.set_size_inches, http://matplotlib.sourceforge.net/users/customizing.html#dynamic-rc-settings

P.S. К сожалению, я не использовал pylab, но, насколько мне известно, весь код выше будет работать одинаково в pylab - просто замените plt в моем коде на pylab (или другое имя, которое вы назначили при импорте pylab). То же самое для matplotlib - используйте pylab вместо этого.

Ответ 3

Думаю, вам нужно указать другое разрешение при сохранении фигуры в файл:

fig = matplotlib.pyplot.figure()
# generate your plot
fig.savefig("myfig.png",dpi=600)

Указание большого значения dpi должно иметь аналогичный эффект, как максимизация окна графического интерфейса.

Ответ 4

Проверьте это: Как увеличить окно plt.show() с помощью Python

Команда отличается в зависимости от того, какой бэкэнд вы используете. Я считаю, что это лучший способ убедиться, что сохраненные изображения имеют такое же масштабирование, как и то, что я просматриваю на своем экране.

Поскольку я использую Canopy с бэкэндом QT:

pylab.get_current_fig_manager().window.showMaximized()

Затем я вызываю savefig(), если требуется, с увеличенным разрешением DPI на один ответ silvado.

Ответ 5

Если я правильно понимаю, что вы хотите сделать, вы можете создать свою фигуру и установить размер окна. После этого вы можете сохранить свой график с помощью кнопки панели инструментов matplotlib. Вот пример:

from pylab import get_current_fig_manager,show,plt,imshow

plt.Figure()
thismanager = get_current_fig_manager()
thismanager.window.wm_geometry("500x500+0+0") 
#in this case 500 is the size (in pixel) of the figure window. In your case you want to maximise to the size of your screen or whatever

imshow(your_data)
show()