Изменение размера фигуры автоматически в matplotlib
Есть ли способ автоматически изменить размер фигуры для правильного размещения содержащихся графиков в изображении matplotlib/pylab?
Я создаю графические диаграммы (sub), которые отличаются форматным соотношением в соответствии с используемыми данными.
Я понимаю, что могу рассчитать соотношение сторон и вручную установить его, но, конечно, есть более простой способ?
Ответы
Ответ 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)