首页 > 解决方案 > 如何在不改变图形大小的情况下将轴框定位在图形内?[Python,matplotlib]

问题描述

我正在尝试创建包含许多图形的视频,因此我需要轴在多个独立图形中保持稳定。但是,y 轴会改变比例,因此轴的框架会随着刻度标签的变化而不断移动。我试图手动告诉 matplotlib 整个图形应该是什么大小,并准确地告诉它轴在图形中的位置,但它不能正常工作。

这是一个基本数字的样子:

import matplotlib.pyplot as plt

fig=plt.figure(figsize=(8,4),facecolor=(0.5,0.5,0.5))
ax=fig.add_subplot()
ax.plot([5,10],[800,900])
plt.show()

在此处输入图像描述

如果我希望轴框架从 left=0.5、bottom=0.5、width=0.2 和 height=0.2 开始,这是我尝试更改它的一种方法。我尝试了许多不同的方法,但都失败了,所以这说明了我正在尝试做的事情:

fig=plt.figure(figsize=(8,4),facecolor=(0.5,0.5,0.5))
ax=fig.add_axes((0.5,0.5,0.2,0.2))
ax.plot([5,10],[800,900])
plt.show()

在此处输入图像描述

现在,我希望它看起来更像这样,以便轴框的黑框对于每个图形都处于完全相同的位置,并且每个图形的大小完全相同。这样,当我把它做成动画时,黑框就不会晃动了。(显然,我不会在真实视频中使缓冲区那么大。)

在此处输入图像描述

标签: pythonmatplotlib

解决方案


您需要使用ax.set_position

如果您的斧头盒最初占据了整个图形,您可以创建一个相对于旧尺寸的新尺寸,例如:

import matplotlib.pyplot as plt 

fig = plt.figure(figsize=(8, 4), facecolor=(0.5, 0.5, 0.5))
ax = fig.add_subplot(111)
bbox = ax.get_position()
new_bbox = (bbox.x0+0.40, bbox.y0+0.40, bbox.width*0.5, bbox.height*0.5)
ax.set_position(new_bbox)
ax.plot([5, 10], [800, 900])
plt.show()

在此处输入图像描述


推荐阅读