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

Изменение размера фигуры автоматически в matplotlib

Есть ли способ автоматически изменить размер фигуры для правильного размещения содержащихся графиков в изображении matplotlib/pylab?

Я создаю графические диаграммы (sub), которые отличаются форматным соотношением в соответствии с используемыми данными.

Я понимаю, что могу рассчитать соотношение сторон и вручную установить его, но, конечно, есть более простой способ?

4b9b3361

Ответ 1

Используйте bbox_inches = 'tight'

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

X = 10*np.random.rand(5,3)

fig = plt.figure(figsize=(15,5),facecolor='w') 
ax = fig.add_subplot(111)
ax.imshow(X, cmap=cm.jet)

plt.savefig("image.png",bbox_inches='tight',dpi=100)

... работает только при сохранении изображений, но не показывая их.

Ответ 2

просто используйте aspect = 'auto', когда вы вызываете imshow

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

X = 10*np.random.rand(5,3)
plt.imshow(X, aspect='auto')

он работает, даже если он предназначен только для показа и не сохранения

Ответ 3

Другой способ сделать это - использовать функцию matplotlib tight_layout

import matplotlib.pyplot as plt
fig,(ax) = plt.subplots(figsize=(8,4), ncols=1)
data = [0,1,2,3,4]
ax.plot(data)
fig.tight_layout()
fig.show()

Ответ 4

Вы имеете в виду изменение размера изображения или области, видимой внутри сюжета?

Размер фигуры можно установить с помощью Figure.set_figsize_inches. Кроме того, в SciPy Cookbook есть запись об изменении размера изображения, содержащего раздел о нескольких изображениях на рисунок.

Также посмотрите на question.

Ответ 5

Вы можете попробовать использовать ось ("масштабируется")

import matplotlib.pyplot as plt
import numpy

#some dummy images
img1 = numpy.array([[.1,.2],[.3,.4]]) 
img2 = numpy.array([[.1,.2],[.3,.4]])

fig,ax = plt.subplots()
ax.imshow(img1,extent=[0,1,0,1])
ax.imshow(img2,extent=[2,3,0,1])
ax.axis('scaled') #this line fits your images to screen 
plt.show()

Ответ 6

Также возможно использовать ax.autoscale с объектом ax

ax.autoscale(enable=True)