matplotlib.pyplot, preserve aspect ratio of the plot

匿名 (未验证) 提交于 2019-12-03 02:05:01

问题:

Assuming we have a polygon coordinates as polygon = [(x1, y1), (x2, y2), ...], the following code displays the polygon:

import matplotlib.pyplot as plt plt.fill(*zip(*polygon)) plt.show()

By default it is trying to adjust the aspect ratio so that the polygon (or whatever other diagram) fits inside the window, and automatically changing it so that it fits even after resizing. Which is great in many cases, except when you are trying to estimate visually if the image is distorted. How to fix the aspect ratio to be strictly 1:1?

(Not sure if "aspect ratio" is the right term here, so in case it is not - I need both X and Y axes to have 1:1 scale, so that (0, 1) on both X and Y takes an exact same amount of screen space. And I need to keep it 1:1 no matter how I resize the window.)

回答1:

Does it help to use:

plt.axis('equal')


回答2:

There is, I'm sure, a way to set this directly as part of your plot command, but I don't remember the trick. To do it after the fact you can use the current axis and set it's aspect ratio with "set_aspect('equal')". In your example:

import matplotlib.pyplot as plt plt.fill(*zip(*polygon)) plt.axes().set_aspect('equal', 'datalim') plt.show()

I use this all the time and it's from the examples on the matplotlib website.



回答3:

'scaled' using plt

The best thing is to use is:

 plt.axis('scaled')

As Saullo Castro said. Because with equal you can't change one axis limit without changing the other so if you want to fit all non-squared figures you will have a lot of white space.

Equal

Scaled

'equal' unsing ax

Alternatively, you can use the axes class.

fig = plt.figure() ax = figure.add_subplot(111) ax.imshow(image) ax.axes.set_aspect('equal')


回答4:

Better plt.axis('scaling'), it works better if you want to modify the axes with xlim() and ylim().



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!