Как сделать pylab.savefig() сохранить изображение для "максимизированного" окна вместо размера по умолчанию
Я использую pylab в matplotlib для создания графика и сохранения графика в файл изображения. Однако, когда я сохраняю изображение с помощью pylab.savefig( image_name )
, я обнаружил, что сохраненное изображение SIZE совпадает с изображением, которое отображается, когда я использую pylab.show()
.
Как это бывает, у меня много данных в сюжете, и когда я использую pylab.show()
, я должен максимизировать окно, прежде чем я смогу увидеть весь график правильно, а тикеры xlabel не накладываются на друг друга.
В любом случае, я могу программно "максимизировать" окно перед сохранением изображения в файл? - на данный момент я получаю только изображение размера окна по умолчанию, что приводит к тому, что метки оси x накладываются друг на друга.
Ответы
Ответ 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()