График Matplotlib не изменяет размер после изменения размера в jupyter [duplicate]

Я еще не нашел пакет для выполнения всех операций со строковым путем, поэтому в итоге я написал свой собственный небольшой пакет, который поддерживает insert (), get () (с возвратом по умолчанию), set () и remove ().

Вы можете использовать точечную нотацию, скобки, числовые индексы, свойства номера строки и ключи с символами, отличными от слова. Простое использование ниже:

> var jsocrud = require('jsocrud');

...

// Get (Read) ---
> var obj = {
>     foo: [
>         {
>             'key w/ non-word chars': 'bar'
>         }
>     ]
> };
undefined

> jsocrud.get(obj, '.foo[0]["key w/ non-word chars"]');
'bar'

https://www.npmjs.com/package/jsocrud

https: // github. ком / вертикальное знание / jsocrud

1120
задан tatwright 1 December 2008 в 22:24
поделиться

12 ответов

Это хорошо работает для меня:

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

9
ответ дан Blairg23 26 August 2018 в 04:44
поделиться

Пожалуйста, попробуйте простой код следующим образом:

from matplotlib import pyplot as plt
plt.figure(figsize=(1,1))
x = [1,2,3]
plt.plot(x, x)
plt.show()

Перед тем, как вы нарисуете, вам нужно установить размер фигуры.

158
ответ дан cbare 26 August 2018 в 04:44
поделиться
  • 1
    Этот ответ говорит мне, что это m atplotlib.pyplot.figure, о котором другие не говорят так четко. Я продолжаю пробовать такие вещи, как matplotlib.figure и matplotlib.figure.Figure – Lyndon White 24 December 2014 в 06:29
  • 2
    & quot; _tkinter.TclError: недостаточно свободной памяти для буфера изображений & quot; – Cerin 30 March 2017 в 00:16
  • 3
    plt.figure(figsize=(1,1)) - это крутой ход. Спасибо. – ximiki 15 November 2017 в 17:24
  • 4
    Это сработало для меня – xssChauhan 2 March 2018 в 20:09
  • 5
    Это не работает для меня в ноутбуке jupyter – Selah 16 August 2018 в 18:52

Поскольку 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))
67
ответ дан Community 26 August 2018 в 04:44
поделиться
  • 1
    Каждый раз, когда я пытаюсь вспомнить, как это сделать, я попадаю в этот пост. Итак, это код, который я обычно ищу: fig = plt.figure() default_size = fig.get_size_inches() fig.set_size_inches( (default_size[0]*2, default_size[1]*2) ) – yauheni_selivonchyk 12 October 2016 в 11:58

ИСПОЛЬЗОВАНИЕ plt.rcParams

Существует также это обходное решение, если вы хотите изменить размер без использования среды рисунка. Например, если вы используете plt.plot().

import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (20,3)

Это очень полезно при построении встроенного (например, с IPython Notebook).

Преобразование в cm

Кортеж figsize принимает дюймы, поэтому, если вы хотите установить его в сантиметрах, вам нужно разделить их на 2.54, посмотрите на этот вопрос .

128
ответ дан G M 26 August 2018 в 04:44
поделиться
  • 1
    Отлично! Также полезно устанавливать его один раз и многократно рисовать. – automorphic 18 October 2017 в 22:44
  • 2
    По какой-то причине, похоже, это больше не работает в ноутбуке Jupyter (но используется). – Ray 13 December 2017 в 15:01
  • 3
    @Ray Можете ли вы написать версию своего ноутбука Jupyter и поведение для меня это работает – G M 13 December 2017 в 17:41
  • 4
    @GM в прошлый раз, когда я тестировал, это была версия Jupyter 4.3.0 и Python 3.6.2 от Anaconda, в Windows 10 и Google Chrome 63.0.3239.84. – Ray 19 December 2017 в 18:13
  • 5
    Чтобы он работал, мне нужно вызвать plt.rcParams["figure.figsize"] = (20,3) в дополнительной ячейке. Когда я вызываю его в той же ячейке, что и оператор импорта, он игнорируется. – asmaier 11 May 2018 в 07:33

В случае, если вы ищете способ изменить размер фигуры в Pandas, вы можете сделать, например ::

df['some_column'].plot(figsize=(10, 5))

, где df - это кадр данных Pandas. Если вы хотите изменить настройки по умолчанию, вы можете сделать следующее:

import matplotlib

matplotlib.rc('figure', figsize=(10, 5))
42
ответ дан Kris 26 August 2018 в 04:44
поделиться

Замечание об отступлении: согласно официальному руководству Matplotlib использование модуля pylab больше не рекомендуется. Пожалуйста, подумайте об использовании модуля matplotlib.pyplot вместо этого, как описано в , этот другой ответ .

Кажется, что работает следующее:

from pylab import rcParams
rcParams['figure.figsize'] = 5, 10

Это делает ширину фигуры 5 дюймов и ее высоту 10 дюймов .

Класс Figure затем использует это как значение по умолчанию для одного из своих аргументов.

259
ответ дан Peter Duniho 26 August 2018 в 04:44
поделиться
  • 1
    Это также хорошо работает в верхней части ноутбука iPython, который (с учетом --pylab = inline) имеет rcParams, уже импортированный на верхнем уровне. – nealmcb 10 December 2013 в 22:57
  • 2
    Это не сработало на моей Windows-машине с интерфейсом OO на pyplot и Qt backend. fig.set_size_inches(18.5, 10.5, forward=True) работал. – Bennett Brown 6 February 2016 в 20:18
  • 3
    Этот ответ в настоящее время обсуждается на Meta – Mischa 10 July 2017 в 14:17

Чтобы увеличить размер вашей фигуры в N раз, вам нужно вставить это прямо перед вашим pl.show ():

N = 2
params = pl.gcf()
plSize = params.get_size_inches()
params.set_size_inches( (plSize[0]*N, plSize[1]*N) )

Он также хорошо работает с ноутбуком ipython.

13
ответ дан psihodelia 26 August 2018 в 04:44
поделиться

Попробуйте прокомментировать строку 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()
19
ответ дан Renaud 26 August 2018 в 04:44
поделиться

Вы можете просто использовать (из 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.

20
ответ дан River 26 August 2018 в 04:44
поделиться

Если вы уже создали фигуру, вы можете быстро это сделать:

fig = matplotlib.pyplot.gcf()
fig.set_size_inches(18.5, 10.5)
fig.savefig('test2png.png', dpi=100)

Чтобы распространить изменение размера на существующее gui-окно, добавьте forward=True

fig.set_size_inches(18.5, 10.5, forward=True)
537
ответ дан tacaswell 26 August 2018 в 04:44
поделиться
  • 1
    Решил меня проблему с imshow, теперь я использую этот код сразу после удаления пространства вокруг области графика с помощью plt.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0). – heltonbiker 26 November 2012 в 16:21
  • 2
    Аналогично, вы можете запустить fig.set_dpi(100). – Erik Shilts 27 March 2015 в 20:07
  • 3
    @drevicko Вам просто нужно добавить forward=True к вызову set_size_inches. – tacaswell 7 June 2015 в 19:38

figure сообщает вам сигнатуру вызова:

from matplotlib.pyplot import figure
figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')

figure(figsize=(1,1)) создаст изображение в дюймах на дюйм, которое будет составлять 80 на 80 пикселей, если только вы также даете другой аргумент dpi.

681
ответ дан Tahlor 26 August 2018 в 04:44
поделиться
  • 1
    Если вы уже создали фигуру, скажите, что это цифра 1 (это по умолчанию используется при использовании pyplot), вы можете использовать цифру (num = 1, figsize = (8, 6), ...) изменить размер и т. д. Если вы используете pyplot / pylab и show() для создания всплывающего окна, вам нужно вызвать figure(num=1,...) перед , что вы рисуете что-либо - pyplot / pylab создает цифру как как только вы рисуете что-то, и размер всплывающего окна, по-видимому, фиксируется на этом этапе. – drevicko 3 July 2013 в 00:31
  • 2
    Я чувствую, что ваш ответ будет лучше, если вы удалите аргументы по умолчанию. Это уменьшает отношение сигнал / шум без необходимости. – frmsaul 5 April 2017 в 18:06
  • 3
    Означает ли это, если вы установили DPI в 1, то figsize станет пиксельным блоком вместо единицы дюймов? Это было бы более полезно при использовании matplotlib для веб-интерфейсов и интерфейсов GUI. – CMCDragonkai 17 July 2017 в 10:48
  • 4
    с figsize (1,1) у вас будет соотношение в изображении как 1: 1? потому что все мои круговые диаграммы показывают овальную форму, и единственный способ, которым я нашел их округлить, - использовать plot.axis («equals»). они будут иметь тот же эффект или они будут вести себя по-другому? – Breno Baiardi 9 November 2017 в 18:43
  • 5
    @BrenoBaiardi Этот вопрос касается размера фигуры. Оси сверху фигуры могут по-прежнему иметь неравномерное соотношение сторон, даже если цифра в целом равна 1: 1, и даже если поле осей равно 1: 1, данные могут масштабироваться по-разному в направлениях x и y. Таким образом, нет, эта команда не гарантирует равное соотношение сторон. – Jouni K. Seppänen 13 November 2017 в 15:43

Это уменьшает размер изображения сразу же после рисования рисунка (по крайней мере, используя Qt4Agg / TkAgg, но не MacOSX - с matplotlib 1.4.0):

matplotlib.pyplot.get_current_fig_manager().resize(width_px, height_px)
6
ответ дан wilywampa 26 August 2018 в 04:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: