Как изменить размер рисунка, нарисованного с помощью Matplotlib?
Как изменить размер фигур, нарисованных с помощью Matplotlib?
Ответы (25)
Вы также можете попробовать инициализировать это:
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams['figure.figsize'] = (8, 6)
mpl.rcParams['axes.grid'] = False
import random
import math
import matplotlib.pyplot as plt
start=-20
end=20
x=[v for v in range(start,end)]
#sigmoid function
def sigmoid(x):
return 1/(1+math.exp(x))
plt.figure(figsize=(8,5))#setting the figure size
plt.scatter([abs(v) for v in x],[sigmoid(v) for v in x])
plt.scatter(x,[sigmoid(sigmoid(v)) for v in x])
Вот мой собственный пример.
Ниже я дал вам ваш ответ и расширил его, чтобы вы могли поэкспериментировать.
Также обратите внимание, что размеры инжира измеряются в дюймах
import matplotlib.pyplot as plt
data = [2,5,8,10,15] # Random data, can use existing data frame column
fig, axs = plt.subplots(figsize = (20,6)) # This is your answer to resize the figure
# The below will help you expand on your question and resize individual elements within your figure. Experiement with the below parameters.
axs.set_title("Data", fontsize = 17.5)
axs.tick_params(axis = 'x', labelsize = 14)
axs.set_xlabel('X Label Here', size = 15)
axs.tick_params(axis = 'y', labelsize =14)
axs.set_ylabel('Y Label Here', size = 15)
plt.plot(data)
Вот как я напечатал свой собственный график с нестандартным размером
import matplotlib.pyplot as plt
from matplotlib.pyplot import figure
figure(figsize=(16, 8), dpi=80)
plt.plot(x_test, color = 'red', label = 'Predicted Price')
plt.plot(y_test, color = 'blue', label = 'Actual Price')
plt.title('Dollar to PKR Prediction')
plt.xlabel('Predicted Price')
plt.ylabel('Actual Dollar Price')
plt.legend()
plt.show()
Когда создает новую фигуру , вы можете указать размер (в дюймах) с помощью аргумента figsize
:
import matplotlib.pyplot as plt fig = plt.figure(figsize=(w,h))
Если вы хотите изменить существующую фигуру , используйте метод set_size_inches()
:
fig.set_size_inches(w,h)
Если вы хотите изменить размер рисунка по умолчанию (6,4 "x 4,8"), используйте "команды запуска" rc
<33>: <33>: <33>
plt.rc('figure', figsize=(w,h))
Следующее обязательно будет работать, но убедитесь, что вы добавили строку plt.figure(figsize=(20,10))
над plt.plot(x,y)
, plt.pie()
и т. Д.
import matplotlib.pyplot as plt
plt.figure(figsize=(20,10))
plt.plot(x,y) ## This is your plot
plt.show()
Код скопирован из amalik2205.
Используйте это:
plt.figure(figsize=(width,height))
Значения width
и height
указаны в дюймах.
Если не указан, по умолчанию используется rcParams["figure.figsize"] = [6.4, 4.8]
. Подробнее здесь.
Сравнение различных подходов к установке точных размеров изображения в пикселях
В этом ответе основное внимание будет уделено:
savefig
- установка размера в пикселях
Вот краткое сравнение некоторых подходов, которые я пробовал, с изображениями, показывающими, что они дают.
Пример базовой линии без попытки установить размеры изображения
Просто для сравнения:
base.py
#!/usr/bin/env python3
import sys
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
fig, ax = plt.subplots()
print('fig.dpi = {}'.format(fig.dpi))
print('fig.get_size_inches() = ' + str(fig.get_size_inches())
t = np.arange(-10. 10. 1.)
plt.plot(t, t, '.')
plt.plot(t, t**2, '.')
ax.text(0. 60. 'Hello', fontdict=dict(size=25))
plt.savefig('base.png', format='png')
запустить:
./base.py
identify base.png
выходы:
fig.dpi = 100.0
fig.get_size_inches() = [6.4 4.8]
base.png PNG 640x480 640x480+0+0 8-bit sRGB 13064B 0.000u 0:00.000
Мой лучший подход на данный момент: plt.savefig(dpi=h/fig.get_size_inches()[1]
управление только высотой
Я думаю, что большую часть времени я буду использовать именно этот вариант, поскольку он прост и масштабируется:
get_size.py
#!/usr/bin/env python3
import sys
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
height = int(sys.argv[1])
fig, ax = plt.subplots()
t = np.arange(-10. 10. 1.)
plt.plot(t, t, '.')
plt.plot(t, t**2, '.')
ax.text(0. 60. 'Hello', fontdict=dict(size=25))
plt.savefig(
'get_size.png',
format='png',
dpi=height/fig.get_size_inches()[1]
)
запуск:
./get_size.py 431
выходы:
get_size.png PNG 574x431 574x431+0+0 8-bit sRGB 10058B 0.000u 0:00.000
и
./get_size.py 1293
выходы:
main.png PNG 1724x1293 1724x1293+0+0 8-bit sRGB 46709B 0.000u 0:00.000
Я обычно устанавливаю только высоту, потому что меня обычно больше всего беспокоит, сколько места по вертикали будет занимать изображение в середине текста.
plt.savefig(bbox_inches='tight'
изменяет размер изображения
Мне всегда кажется, что вокруг изображений слишком много белого пространства, и я обычно добавляю bbox_inches='tight'
из:
Удаление пробелов вокруг сохраненного изображения в matplotlib
Однако это работает путем кадрирования изображения, и вы не получите желаемых размеров с его помощью.
Вместо этого, этот другой подход, предложенный в том же вопросе, кажется, работает хорошо:
plt.tight_layout(pad=1)
plt.savefig(...
, что дает точную желаемую высоту для высоты, равной 431:
Фиксированная высота, set_aspect
, автоматически изменяемая ширина и небольшие поля
Эммм, set_aspect
снова портит ситуацию и не позволяет plt.tight_layout
фактически удалить поля ...
plt.savefig(dpi=h/fig.get_size_inches()[1]
+ контроль ширины
Если вам действительно нужна определенная ширина в дополнение к высоте, это, похоже, сработает:
width.py
#!/usr/bin/env python3
import sys
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
h = int(sys.argv[1])
w = int(sys.argv[2])
fig, ax = plt.subplots()
wi, hi = fig.get_size_inches()
fig.set_size_inches(hi*(w/h), hi)
t = np.arange(-10. 10. 1.)
plt.plot(t, t, '.')
plt.plot(t, t**2, '.')
ax.text(0. 60. 'Hello', fontdict=dict(size=25))
plt.savefig(
'width.png',
format='png',
dpi=h/hi
)
запустить:
./width.py 431 869
вывод:
width.png PNG 869x431 869x431+0+0 8-bit sRGB 10965B 0.000u 0:00.000
и для небольшой ширины:
./width.py 431 869
вывод:
width.png PNG 211x431 211x431+0+0 8-bit sRGB 6949B 0.000u 0:00.000
Таким образом, кажется, что шрифты масштабируются правильно, у нас просто возникают проблемы с очень маленькой шириной, когда надписи обрезаются, например 100
вверху слева.
Мне удалось обойти тех, у кого Удаление пробелов вокруг сохраненного изображения в matplotlib
plt.tight_layout(pad=1)
, что дает:
width.png PNG 211x431 211x431+0+0 8-bit sRGB 7134B 0.000u 0:00.000
Из этого мы также видим, что tight_layout
удаляет много пустого пространства в верхней части изображения, поэтому я обычно всегда использую его.
Фиксированная базовая высота магии, dpi
на fig.set_size_inches
и plt.savefig(dpi=
масштабирование
Я считаю, что это эквивалентно подходу, упомянутому по адресу: https://coderhelper.com/a/13714720/895245
magic.py
#!/usr/bin/env python3
import sys
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
magic_height = 300
w = int(sys.argv[1])
h = int(sys.argv[2])
dpi = 80
fig, ax = plt.subplots(dpi=dpi)
fig.set_size_inches(magic_height*w/(h*dpi), magic_height/dpi)
t = np.arange(-10. 10. 1.)
plt.plot(t, t, '.')
plt.plot(t, t**2, '.')
ax.text(0. 60. 'Hello', fontdict=dict(size=25))
plt.savefig(
'magic.png',
format='png',
dpi=h/magic_height*dpi,
)
запуск:
./magic.py 431 231
выходы:
magic.png PNG 431x231 431x231+0+0 8-bit sRGB 7923B 0.000u 0:00.000
И чтобы посмотреть, хорошо ли масштабируется:
./magic.py 1291 693
выходы:
magic.png PNG 1291x693 1291x693+0+0 8-bit sRGB 25013B 0.000u 0:00.000
Итак, мы видим, что этот подход также работает хорошо. Единственная проблема, с которой я столкнулся, заключается в том, что вам нужно установить этот параметр magic_height
или его эквивалент.
Фиксированный DPI + set_size_inches
Этот подход дал немного неправильный размер пикселя, что затрудняет плавное масштабирование всего.
set_size_inches.py
#!/usr/bin/env python3
import sys
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
w = int(sys.argv[1])
h = int(sys.argv[2])
fig, ax = plt.subplots()
fig.set_size_inches(w/fig.dpi, h/fig.dpi)
t = np.arange(-10. 10. 1.)
plt.plot(t, t, '.')
plt.plot(t, t**2, '.')
ax.text(
0,
60.
'Hello',
# Keep font size fixed independently of DPI.
# https://coderhelper.com/questions/39395616/matplotlib-change-figsize-but-keep-fontsize-constant
fontdict=dict(size=10*h/fig.dpi),
)
plt.savefig(
'set_size_inches.png',
format='png',
)
запуск:
./set_size_inches.py 431 231
выходы:
set_size_inches.png PNG 430x231 430x231+0+0 8-bit sRGB 8078B 0.000u 0:00.000
, поэтому высота немного отклонена, а изображение:
Размеры пикселей также верны, если я увеличу их в 3 раза:
./set_size_inches.py 1291 693
выходы:
set_size_inches.png PNG 1291x693 1291x693+0+0 8-bit sRGB 19798B 0.000u 0:00.000
Однако мы понимаем, что для правильного масштабирования этого подхода вам необходимо сделать каждую настройку, зависящую от DPI, пропорциональной размеру в дюймах.
В предыдущем примере мы сделали пропорциональным только текст «Hello», и он сохранил свою высоту от 60 до 80, как и следовало ожидать. Но все, для чего мы этого не сделали, выглядит крошечным, в том числе:
- ширина линии осей
- метки-отметки
- точечные маркеры
SVG
Я не смог найти, как установить его для изображений SVG, мои подходы работали только для PNG, например:
get_size_svg.py
#!/usr/bin/env python3
import sys
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
height = int(sys.argv[1])
fig, ax = plt.subplots()
t = np.arange(-10. 10. 1.)
plt.plot(t, t, '.')
plt.plot(t, t**2, '.')
ax.text(0. 60. 'Hello', fontdict=dict(size=25))
plt.savefig(
'get_size_svg.svg',
format='svg',
dpi=height/fig.get_size_inches()[1]
)
запуск:
./get_size_svg.py 431
, а сгенерированные выходные данные содержат:
<svg height="345.6pt" version="1.1" viewBox="0 0 460.8 345.6" width="460.8pt"
и идентификация говорит:
get_size_svg.svg SVG 614x461 614x461+0+0 8-bit sRGB 17094B 0.000u 0:00.000
, и если я открою его в Chromium 86, при наведении изображения мыши в инструментах отладки браузера эта высота будет равна 460,79.
Но, конечно, поскольку SVG является векторным форматом, теоретически все должно масштабироваться, поэтому вы можете просто преобразовать его в любой формат фиксированного размера без потери разрешения, например:
inkscape -h 431 get_size_svg.svg -b FFF -e get_size_svg.png
дает точную высоту:
Я использую Inkscape вместо Imagemagick convert
здесь, потому что вам нужно возиться с -density
, чтобы получить резкие изменения размеров SVG с помощью ImageMagick:
- https://superuser.com/questions/598849/imagemagick-convert-how-to-produce-sharp-resized-png-files-from-svg-files/1602059#1602059 <60> <228112144149660 >
- Как преобразовать SVG в PNG с помощью ImageMagick?
И установка <img height=""
в HTML также должна работать в браузере.
Проверено на matplotlib == 3.2.2.
Я всегда использую следующий шаблон:
x_inches = 150*(1/25.4) # [mm]*constant
y_inches = x_inches*(0.8)
dpi = 96
fig = plt.figure(1, figsize = (x_inches,y_inches), dpi = dpi, constrained_layout = True)
В этом примере вы можете установить размеры фигуры в дюймах или миллиметрах. При установке constrained_layout
на True
графики заполняют вашу фигуру без границ.
Обобщение и упрощение ответ психоделии:
Если вы хотите изменить текущий размер фигуры на коэффициент sizefactor
:
import matplotlib.pyplot as plt
# Here goes your code
fig_size = plt.gcf().get_size_inches() # Get current size
sizefactor = 0.8 # Set a zoom factor
# Modify the current size by the factor
plt.gcf().set_size_inches(sizefactor * fig_size)
После изменения текущего размера может потребоваться точная настройка компоновки подзаголовка . Вы можете сделать это в графическом интерфейсе окна рисунка или с помощью команды subplots_adjust
Например,
plt.subplots_adjust(left=0.16, bottom=0.19, top=0.82)
import matplotlib.pyplot as plt
plt.figure(figsize=(20,10))
plt.plot(x,y) ## This is your plot
plt.show()
Вы также можете использовать:
fig, ax = plt.subplots(figsize=(20, 10))
Другой вариант - использовать функцию rc () в Matplotlib (единицы измерения - дюймы):
import matplotlib
matplotlib.rc('figure', figsize=[10,5])
Вы можете просто использовать (из matplotlib.figure.Figure):
fig.set_size_inches(width,height)
Начиная с Matplotlib 2.0.0, изменения в вашем холсте будут видны немедленно, так как ключевое слово forward
по умолчанию имеет значение True
.
Если вы хотите просто изменить ширину или высоту вместо обоих, вы можете использовать
fig.set_figwidth(val)
или fig.set_figheight(val)
Они также немедленно обновят ваш холст, но только в Matplotlib 2.2.0 и новее.
Для более старых версий
Вам необходимо явно указать forward=True
, чтобы оперативно обновить ваш холст в версиях, более старых, чем указано выше. Обратите внимание, что функции set_figwidth
и set_figheight
не поддерживают параметр forward
в версиях, предшествующих Matplotlib 1.5.0.
Использование plt.rcParams
Существует также этот обходной путь, если вы хотите изменить размер без использования среды рисунка. Итак, если вы используете, например, plt.plot()
, вы можете установить кортеж с шириной и высотой.
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (20,3)
Это очень полезно при построении инлайн (например, с IPython Notebook). Как заметил Асмайер , желательно не помещать этот оператор в ту же ячейку операторов импорта.
Чтобы восстановить глобальный размер фигуры по умолчанию для последующих графиков:
plt.rcParams["figure.figsize"] = plt.rcParamsDefault["figure.figsize"]
Преобразование в см
Кортеж figsize
принимает дюймы, поэтому, если вы хотите установить его в сантиметрах, вам нужно разделить их на 2,54. Взгляните на этот вопрос.
Отлично! Также полезно для однократной установки и многократного построения графика.
По какой-то причине кажется, что это больше не работает в блокноте Jupyter (но раньше).
@Ray Можете ли вы написать версию своей записной книжки Jupyter и поведение, для меня это работает?
@GM в прошлый раз, когда я тестировал, это были Jupyter версии 4.3.0 и Python 3.6.2 от Anaconda в Windows 10 и Google Chrome 63.0.3239.84.
Чтобы он заработал, мне нужно позвонить по телефону plt.rcParams["figure.figsize"] = (20,3)
в дополнительной ячейке. Когда я вызываю его в той же ячейке, что и оператор импорта, он игнорируется.
Очень прагматично, как и в документе: matplotlib.org/api/_as_gen/matplotlib.pyplot.figure.html Следует отметить только одно: значения этого кортежа равны ширине и высоте соответственно
@asmaier Я заметил такое же поведение. Более того, если вы просто хотите удвоить / N-умножить размер и доступно число, вы можете сделать: plt.rcParams["figure.figsize"] = np.array(plt.rcParams["figure.figsize"]) * 3
Я широко использую это в своем рабочем процессе. Я установил plt.rcParams['figure.figsize'] = (w, h)
, чтобы установить глобальный размер для всех графиков, и изменить размеры отдельных фигур в зависимости от случая, используя plt.figure(figsize=(w, h))
.
Быстрый способ масштабирования, скажем, только по вертикали: plt.rcParams["figure.figsize"][1] *= 1.5 fig, axs = plt.subplots(nrows = 2, sharex = True)
Чтобы сбросить глобальный размер фигуры для последующих графиков обратно к значениям по умолчанию, используйте plt.rcParams['figure.figsize'] = plt.rcParamsDefault['figure.figsize']
@Eiron, это хороший трюк, не стесняйтесь редактировать ответ, если хотите
Если вы ищете способ изменить размер рисунка в Pandas , вы можете, например, сделать:
df['some_column'].plot(figsize=(10, 5))
, где df
- фрейм данных Pandas. Или, чтобы использовать существующую фигуру или оси:
fig, ax = plt.subplots(figsize=(10, 5))
df['some_column'].plot(ax=ax)
Если вы хотите изменить настройки по умолчанию, вы можете сделать следующее:
import matplotlib
matplotlib.rc('figure', figsize=(10, 5))
Поскольку Matplotlib не может использовать метрическую систему изначально, если вы хотите указать размер вашей фигуры в разумных единицах длины, таких как сантиметры, вы можете сделать следующее (код из gns-ank):
def cm2inch(*tupl):
inch = 2.54
if isinstance(tupl[0], tuple):
return tuple(i/inch for i in tupl[0])
else:
return tuple(i/inch for i in tupl)
Затем вы можете использовать:
plt.figure(figsize=cm2inch(21, 29.7))
Чтобы увеличить размер вашей фигуры в N раз, вам нужно вставить это непосредственно перед вашим pl.show () :
N = 2
params = pl.gcf()
plSize = params.get_size_inches()
params.set_size_inches((plSize[0]*N, plSize[1]*N))
Он также хорошо работает с ноутбуком IPython.
Это изменяет размер фигуры сразу же, даже после того, как фигура была нарисована (по крайней мере, с использованием Qt4Agg / TkAgg - но не Mac OS X - с Matplotlib 1.4.0):
matplotlib.pyplot.get_current_fig_manager().resize(width_px, height_px)
Попробуйте ввести простой код:
from matplotlib import pyplot as plt
plt.figure(figsize=(1,1))
x = [1,2,3]
plt.plot(x, x)
plt.show()
Вам необходимо установить размер фигуры перед тем, как печатать.
Этот ответ говорит мне, что это m atplotlib.pyplot.figure
, о чем другие не говорят так ясно. Я продолжаю пробовать такие вещи, как matplotlib.figure
и matplotlib.figure.Figure
"_tkinter.TclError: недостаточно свободной памяти для буфера изображений"
plt.figure(figsize=(1,1))
- ключевой шаг. Спасибо.
В ноутбуке jupyter это сработало для меня: plt.figure (figsize = (20,10))
Тем, кто использует jupyter notebook, убедитесь, что вы используете plt.figure (figsize = (15, 10)) перед другими командами plt.
Меня устраивает:
from matplotlib import pyplot as plt
F = plt.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
Это сообщение на форуме также может помочь: Изменение размера окна фигур
Попробуйте закомментировать строку fig = ...
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2
fig = plt.figure(figsize=(18, 18))
plt.scatter(x, y, s=area, alpha=0.5)
plt.show()
Если у вас уже есть фигура, вы можете быстро сделать это:
fig = matplotlib.pyplot.gcf()
fig.set_size_inches(18.5, 10.5)
fig.savefig('test2png.png', dpi=100)
Чтобы распространить изменение размера на существующее окно графического интерфейса пользователя, добавьте forward=True
:
fig.set_size_inches(18.5, 10.5, forward=True)
Решил мне проблему с imshow
, теперь я использую этот код сразу после удаления пространства вокруг области построения с помощью plt.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0)
.
Точно так же вы можете запустить fig.set_dpi(100)
.
Я использую это в OS X под ipython 3.7, matplotlib 3.0.3. Я могу отрегулировать размер фигуры, но размер окна не изменяется (холст фигуры настраивается, но окно не увеличивается и не сжимается, чтобы вместить холст). Аргумент ключевого слова forward = True не оказывает ожидаемого эффекта на этой платформе.
figure
сообщает подпись вызова:
from matplotlib.pyplot import figure
figure(figsize=(8, 6), dpi=80)
figure(figsize=(1,1))
создаст изображение дюйм за дюймом, которое будет иметь размер 80 на 80 пикселей, если вы также не укажете другой аргумент dpi.
Если вы уже создали фигуру, скажите, что это 'цифра 1' (она используется по умолчанию, когда вы используете pyplot), вы можете использовать figure (num = 1, figsize = (8, 6), ...) чтобы изменить его размер и т. д. Если вы используете pyplot / pylab и show()
для создания всплывающего окна, вам нужно вызвать figure(num=1,...)
до того, как вы что-нибудь построите - pyplot / pylab создаст фигуру, как только когда вы что-то рисуете, размер всплывающего окна кажется фиксированным на этом этапе.
Означает ли это, что если вы установите DPI на 1, тогда figsize станет единицей пикселей вместо единицы дюйма? Это было бы более полезно при использовании matplotlib в веб-интерфейсах и графических интерфейсах.
с figsize (1,1) у вас будет соотношение на изображении как 1: 1? потому что все мои круговые диаграммы имеют овальную форму, и я нашел единственный способ сделать их круглыми - это использовать plot.axis ("равно"). они будут иметь такой же эффект или они будут вести себя по-разному?
@BrenoBaiardi Это вопрос о размере фигуры. Оси в верхней части рисунка могут по-прежнему иметь неравное соотношение сторон, даже если фигура в целом составляет 1: 1, и даже если поле осей составляет 1: 1, данные могут масштабироваться по-разному в направлениях x и y. Итак, нет, эта команда не гарантирует равное соотношение сторон.
Обратите внимание, что если вы установите слишком большое число в figsize
, цифра будет увеличиваться только до краев экрана. Это открывает возможность для горизонтальной максимизации и вертикальной максимизации.
Первая ссылка в Google для 'matplotlib figure size'
: AdjustingImageSize (Кэш Google страницы).
Вот тестовый сценарий со страницы выше. Он создает test[1-3].png
файлов разных размеров одного и того же изображения:
#!/usr/bin/env python
"""
This is a small demo file that helps teach how to adjust figure sizes
for matplotlib
"""
import matplotlib
print "using MPL version:", matplotlib.__version__
matplotlib.use("WXAgg") # do this before pylab so you don'tget the default back end.
import pylab
import numpy as np
# Generate and plot some simple data:
x = np.arange(0, 2*np.pi, 0.1)
y = np.sin(x)
pylab.plot(x,y)
F = pylab.gcf()
# Now check everything with the defaults:
DPI = F.get_dpi()
print "DPI:", DPI
DefaultSize = F.get_size_inches()
print "Default size in Inches", DefaultSize
print "Which should result in a %i x %i Image"%(DPI*DefaultSize[0], DPI*DefaultSize[1])
# the default is 100dpi for savefig:
F.savefig("test1.png")
# this gives me a 797 x 566 pixel image, which is about 100 DPI
# Now make the image twice as big, while keeping the fonts and all the
# same size
F.set_size_inches( (DefaultSize[0]*2, DefaultSize[1]*2) )
Size = F.get_size_inches()
print "Size in Inches", Size
F.savefig("test2.png")
# this results in a 1595x1132 image
# Now make the image twice as big, making all the fonts and lines
# bigger too.
F.set_size_inches( DefaultSize )# resetthe size
Size = F.get_size_inches()
print "Size in Inches", Size
F.savefig("test3.png", dpi = (200)) # change the dpi
# this also results in a 1595x1132 image, but the fonts are larger.
Вывод:
using MPL version: 0.98.1
DPI: 80
Default size in Inches [ 8. 6.]
Which should result in a 640 x 480 Image
Size in Inches [ 16. 12.]
Size in Inches [ 16. 12.]
Две примечания:
-
Комментарии модуля и фактический результат различаются.
Этот ответ позволяет легко объединить все три изображения в один файл изображения, чтобы увидеть разницу в размерах.
Каждый раз, когда я пытаюсь вспомнить, как это сделать, я попадаю в этот пост. Итак, это код, который я обычно ищу: fig = plt.figure() default_size = fig.get_size_inches() fig.set_size_inches( (default_size[0]*2, default_size[1]*2) )
Примечание об устаревании:
Согласно официальному руководству Matplotlib, использование модуляpylab
больше не рекомендуется. Вместо этого рассмотрите возможность использования модуляmatplotlib.pyplot
, как описано в этом другом ответе.
Кажется, работает следующее:
from pylab import rcParams
rcParams['figure.figsize'] = 5, 10
Таким образом, ширина фигуры составляет 5 дюймов, а высота - 10 дюймов .
Затем класс Figure использует это как значение по умолчанию для одного из своих аргументов.
Это также хорошо работает в верхней части записной книжки iPython, которая (с учетом --pylab = inline) имеет rcParams, уже импортированные на верхнем уровне.
Это не сработало на моей машине с Windows с интерфейсом OO для pyplot и бэкэнда Qt. fig.set_size_inches(18.5, 10.5, forward=True)
работал.
Этот ответ в настоящее время обсуждается на Мета
Для версии Python: 3.6.4, matplotlib: 2.2.3 Я думаю, вам нужно передать список или кортеж, например. rcParams ['figure.figsize'] = (5, 10)
Кто-нибудь знает, почему это не работает при первом запуске ячейки?
@ g07kore есть выдающаяся ошибка, связанная с этим: github.com/ipython/ipython/issues/11098
скопировал ваш фрагмент слишком много раз, поэтому я оставляю этот комментарий здесь, для тех, кому просто нужна копипаста: plt.rcParams['figure.figsize'] = 5, 10
@ g07kore: Я думаю, что это работает, когда обе строки (import и figsize) находятся в разных ячейках. Не спрашивайте меня, почему.
Это очень полезно, так как размер назначается глобально. Таким образом, вам не нужно указывать его для каждого участка. Однако может быть более распространенным выполнение
import matplotlib.pyplot as plt
, а затемplt.rc('figure', figsize=(10,5))
.