По умолчанию matplotlib делает то, что вы хотите для линейных графиков и т. Д.
Где-то в вашем коде вы, вероятно, устанавливаете фиксированное соотношение сторон и задаете для регулируемой части границы оси значение "box"
вместо "datalim"
.
Скорее всего, то, что вы звоните, делает это без вашего ведома. Например, если вы вызываете plt.imshow
, он делает это по умолчанию (по сути, он вызывает plt.axis('image')
, который устанавливает аспект в 1,0 и настраивается на «рамку»), чтобы изображения не растягивались до нечетных соотношений.
Есть несколько способов исправить это. Самое простое - просто позвонить plt.axis('tight')
перед изменением размера оси x с помощью plt.xlim
.
import matplotlib.pyplot as plt
import numpy as np
data = np.random.random((10,10))
plt.figure()
plt.imshow(data, interpolation='nearest')
plt.title('Original Plot')
plt.figure()
plt.imshow(data, interpolation='nearest')
plt.xlim([2, 4])
plt.title('Resized Plot')
plt.figure()
plt.imshow(data, interpolation='nearest')
plt.axis('tight')
plt.xlim([2, 4])
plt.title('Resized Plot with Tight Axis')
plt.show()