Python 如何获得matplotlib绘图区域的大小(以英寸为单位)?
我正在为一张纸做数字,我想在离绘图左上角一定距离的地方贴上标签Python 如何获得matplotlib绘图区域的大小(以英寸为单位)?,python,matplotlib,size,Python,Matplotlib,Size,我正在为一张纸做数字,我想在离绘图左上角一定距离的地方贴上标签ax.text(x,y,label,transform=ax.transAxes)几乎可以做到这一点,但将位置指定为绘图大小的一小部分。如果我能得到绘图区域的绝对大小,我可以用它来转换。例如,在下面的脚本中,如何获得高度和宽度 编辑:我只需要绘图的高度和宽度(而不是整个图形),不包括标签、记号等 from matplotlib import pyplot as plt import numpy as np data = np.ran
ax.text(x,y,label,transform=ax.transAxes)
几乎可以做到这一点,但将位置指定为绘图大小的一小部分。如果我能得到绘图区域的绝对大小,我可以用它来转换。例如,在下面的脚本中,如何获得高度和宽度
编辑:我只需要绘图的高度和宽度(而不是整个图形),不包括标签、记号等
from matplotlib import pyplot as plt
import numpy as np
data = np.random.rand(10,10)
fig, ax = plt.subplots()
ax.pcolormesh(data)
ax.set_aspect("equal")
# get width and height of plot here?
plt.show()
我确实找到了一种方法来做到这一点。它变得更加复杂,因为我使用了
set\u aspect()
-set\u aspect()
修改ax
的边界框,但默认情况下,直到绘制ax
时才应用修改(例如,通过plt.show()
),这会使获取边界框大小的尝试出错
解决办法是:
set_aspect()
而出现问题,请在尝试获取边界框大小之前调用apply_aspect()
。这使得更新后的纵横比实际上修改了边界框的大小,以便我们可以找到它是什么
from matplotlib import pyplot as plt
import numpy as np
data = np.random.rand(10,10)
fig, ax = plt.subplots()
ax.pcolormesh(data)
ax.set_aspect("equal")
# get width and height of plot here?
plt.show()
ax.get\u window\u extent()
的结果是“显示单位”,我们可以使用fig.dpi
将其转换为英寸
from matplotlib import pyplot as plt
import numpy as np
data = np.random.rand(10,10)
fig, ax = plt.subplots()
ax.pcolormesh(data)
ax.set_aspect("equal")
ax.apply_aspect()
bbox = ax.get_window_extent()
# dpi used to convert from display units to inches
dpi = fig.dpi
height = bbox.height / dpi # in inches
width = bbox.width / dpi # in inches
x = 0.2 # in inches
y = 0.1 # in inches
ax.text(x / width, 1.0 - y / height, "(a)", verticalalignment="top", color="w", transform=ax.transAxes)
plt.show()
其中:
编辑:我用matplotlib-3.3.2测试了此解决方案。您的上述回答很好,但可能更好:
导入matplotlib.pyplot作为plt
将matplotlib.transforms作为MTTransforms导入
图,ax=plt.子批次()
变速器=(图dpi\u刻度\u变速器+
M转换.规模转换(0,1,最大转换)
ax.set_方面(1)
ax.text(0.1,-0.2,'Boo',transform=trans)
plt.show()
您可以在以下位置阅读更多内容:
fig.get\u size\u inches()
?对不起,我需要让问题更清楚。我指的是轴的绘图区域(不是整个图形)的大小,不包括标签、记号等。