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

StackOverflow https://stackoverflow.com/questions/1271023

  •  13-09-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

Использовать bbox_inches = 'плотный'

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)

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

Другие советы

просто используйте аспект='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')

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

Другой способ сделать это — использовать функцию matplotlib strict_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()

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

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

Также взгляните на это вопрос.

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

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()

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

ax.autoscale(enable=True) 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top