Ответ 1
Я обычно использую
mng = plt.get_current_fig_manager()
mng.frame.Maximize(True)
перед вызовом plt.show()
, и я получу максимально развернутое окно. Это работает только для бэкэнд 'wx'.
EDIT:
для бэкэнда Qt4Agg, см. kwerenda answer.
Просто для любопытства я хотел бы знать, как это сделать в приведенном ниже коде. Я искал ответ, но бесполезен.
import numpy as np
import matplotlib.pyplot as plt
data=np.random.exponential(scale=180, size=10000)
print ('el valor medio de la distribucion exponencial es: ')
print np.average(data)
plt.hist(data,bins=len(data)**0.5,normed=True, cumulative=True, facecolor='red', label='datos tamano paqutes acumulativa', alpha=0.5)
plt.legend()
plt.xlabel('algo')
plt.ylabel('algo')
plt.grid()
plt.show()
Я обычно использую
mng = plt.get_current_fig_manager()
mng.frame.Maximize(True)
перед вызовом plt.show()
, и я получу максимально развернутое окно. Это работает только для бэкэнд 'wx'.
EDIT:
для бэкэнда Qt4Agg, см. kwerenda answer.
так как я на нулевой репутации, я не могу оставить никакой другой знак, чем новый ответ Я нахожусь в Windows (WIN7), запуская Python 2.7.5 и Matplotlib 1.3.1
Мне удалось максимизировать окна Figure для TkAgg, QT4Agg и wxAgg, используя следующие строки:
from matplotlib import pyplot as plt
### for 'TkAgg' backend
plt.figure(1)
plt.switch_backend('TkAgg') #TkAgg (instead Qt4Agg)
print '#1 Backend:',plt.get_backend()
plt.plot([1,2,6,4])
mng = plt.get_current_fig_manager()
### works on Ubuntu??? >> did NOT working on windows
# mng.resize(*mng.window.maxsize())
mng.window.state('zoomed') #works fine on Windows!
plt.show() #close the figure to run the next section
### for 'wxAgg' backend
plt.figure(2)
plt.switch_backend('wxAgg')
print '#2 Backend:',plt.get_backend()
plt.plot([1,2,6,4])
mng = plt.get_current_fig_manager()
mng.frame.Maximize(True)
plt.show() #close the figure to run the next section
### for 'Qt4Agg' backend
plt.figure(3)
plt.switch_backend('QT4Agg') #default on my system
print '#3 Backend:',plt.get_backend()
plt.plot([1,2,6,4])
figManager = plt.get_current_fig_manager()
figManager.window.showMaximized()
plt.show()
Надеемся, что это резюме предыдущих ответов (и некоторых дополнений), объединенное в рабочем примере (по крайней мере для Windows), помогает. Приветствия
Собственная команда Qt backend (FigureManagerQT):
figManager = plt.get_current_fig_manager()
figManager.window.showMaximized()
Это делает окно для меня полным экраном для меня, под Ubuntu 12.04 с бэкэндом TkAgg:
mng = plt.get_current_fig_manager()
mng.resize(*mng.window.maxsize())
Для меня ничего из этого не было. Я использую Tk backend на Ubuntu 14.04, который содержит matplotlib 1.3.1.
Следующий код создает окно полноэкранного графика, которое не совпадает с максимизацией, но оно прекрасно выполняет мою цель:
from matplotlib import pyplot as plt
mng = plt.get_current_fig_manager()
mng.full_screen_toggle()
plt.show()
Это должно работать (по крайней мере, с TkAgg):
wm = plt.get_current_fig_manager()
wm.window.state('zoomed')
(принятый из вышеизложенного и Использование Tkinter, есть ли способ получить размер экрана для удобства использования без видимого увеличения окна?
Я получаю mng.frame.Maximize(True) AttributeError: FigureManagerTkAgg instance has no attribute 'frame'
.
Затем я просмотрел атрибуты mng
has, и я нашел это:
mng.window.showMaximized()
Это сработало для меня.
Итак, для людей, которые имеют такую же проблему, вы можете попробовать это.
Кстати, моя версия Matplotlib - 1.3.1.
Я нашел это для полноэкранного режима в Ubuntu
#Show full screen
mng = plt.get_current_fig_manager()
mng.full_screen_toggle()
Это своего рода хакерский и, вероятно, не переносимый, используйте его только в том случае, если вы ищете быстрый и грязный. Если бы я просто установил фигуру намного больше, чем экран, она занимает ровно весь экран.
fig = figure(figsize=(80, 60))
Фактически, в Ubuntu 16.04 с Qt4Agg он максимизирует окно (не полноэкранное), если оно больше экрана. (Если у вас есть два монитора, он просто максимизирует его на одном из них).
Попробуйте plt.figure(figsize=(6*3.13,4*3.13))
, чтобы сделать график больше.
При нажатии клавиши f
(или ctrl+f
в 1.2rc1) при фокусировке на графике будет отображаться полноэкранное окно графика. Не совсем максимизация, но, возможно, лучше.
Кроме этого, чтобы максимизировать максимальные значения, вам нужно будет использовать специальные команды GUI Toolkit (если они существуют для вашего конкретного бэкэнд).
НТН
Попробуйте использовать метод Figure.set_size_inches с дополнительным ключевым аргументом forward=True
. Согласно документации, это должно изменить размер окна рисунка.
То, произойдет ли это на самом деле, будет зависеть от используемой вами операционной системы.
В моих версиях (Python 3.6, Eclipse, Windows 7) приведенные выше фрагменты не работали, но с подсказками, данными Eclipse/pydev (после ввода: mng.), Я обнаружил:
mng.full_screen_toggle()
Кажется, что использование mng-команд нормально только для локальной разработки...
Хорошо, так это то, что сработало для меня. Я сделал весь параметр showMaximize(), и он изменяет размер вашего окна пропорционально размеру фигуры, но он не расширяется и не "подходит" к холсту. Я решил это:
mng = plt.get_current_fig_manager()
mng.window.showMaximized()
plt.tight_layout()
plt.savefig('Images/SAVES_PIC_AS_PDF.pdf')
plt.show()
Единственное решение, которое работало на Win 10 без нареканий.
import matplotlib.pyplot as plt
plt.plot(x_data, y_data)
mng = plt.get_current_fig_manager()
mng.window.state("zoomed")
plt.show()
Мои лучшие усилия на данный момент, поддержка разных бэкэндов:
from platform import system
def plt_maximize():
# See discussion: https://stackoverflow.com/questions/12439588/how-to-maximize-a-plt-show-window-using-python
backend = plt.get_backend()
cfm = plt.get_current_fig_manager()
if backend == "wxAgg":
cfm.frame.Maximize(True)
elif backend == "TkAgg":
if system() == "win32":
cfm.window.state('zoomed') # This is windows only
else:
cfm.resize(*cfm.window.maxsize())
elif backend == 'QT4Agg':
cfm.window.showMaximized()
elif callable(getattr(cfm, "full_screen_toggle", None)):
if not getattr(cfm, "flag_is_max", None):
cfm.full_screen_toggle()
cfm.flag_is_max = True
else:
raise RuntimeError("plt_maximize() is not implemented for current backend:", backend)
Это не обязательно максимизирует ваше окно, но оно изменяет размер вашего окна пропорционально размеру фигуры:
from matplotlib import pyplot as plt
F = gcf()
Size = F.get_size_inches()
F.set_size_inches(Size[0]*2, Size[1]*2, forward=True)#Set forward to True to resize window along with plot in figure.
plt.show() #or plt.imshow(z_array) if using an animation, where z_array is a matrix or numpy array
Это также может помочь: http://matplotlib.1069221.n5.nabble.com/Resizing-figure-windows-td11424.html
Следующие действия могут работать со всеми бэкэндами, но я тестировал их только на QT:
import numpy as np
import matplotlib.pyplot as plt
import time
plt.switch_backend('QT4Agg') #default on my system
print('Backend: {}'.format(plt.get_backend()))
fig = plt.figure()
ax = fig.add_axes([0,0, 1,1])
ax.axis([0,10, 0,10])
ax.plot(5, 5, 'ro')
mng = plt._pylab_helpers.Gcf.figs.get(fig.number, None)
mng.window.showMaximized() #maximize the figure
time.sleep(3)
mng.window.showMinimized() #minimize the figure
time.sleep(3)
mng.window.showNormal() #normal figure
time.sleep(3)
mng.window.hide() #hide the figure
time.sleep(3)
fig.show() #show the previously hidden figure
ax.plot(6,6, 'bo') #just to check that everything is ok
plt.show()
Вот функция, основанная на ответе @Pythonio. Я инкапсулирую его в функцию, которая автоматически определяет, какой бэкэнд он использует, и выполняет соответствующие действия.
def plt_set_fullscreen():
backend = str(plt.get_backend())
mgr = plt.get_current_fig_manager()
if backend == 'TkAgg':
if os.name == 'nt':
mgr.window.state('zoomed')
else:
mgr.resize(*mgr.window.maxsize())
elif backend == 'wxAgg':
mgr.frame.Maximize(True)
elif backend == 'Qt4Agg':
mgr.window.showMaximized()