问题描述
只是徘徊 - 如何在 Matplotlib 中获得子图(轴?)的大小?
Just wandering - how can one obtain the size of a subplot (axes?) in Matplotlib?
如果我在 https://matplotlib.org 中按 Ctrl-F 大小"/3.1.1/api/axes_api.html -在上下文中只有一个匹配项:"...具有不同的标记大小和/或...",因此它并没有真正告诉我如何查找轴的大小.
If I do Ctrl-F "size" in https://matplotlib.org/3.1.1/api/axes_api.html - there is only one match, in context: "... with varying marker size and/or ...", so it does not really tell me how to find the size of the axes.
说,我的代码与 交互式调整大小在 Matplotlib 中绘制和切换绘图可见性?
#!/usr/bin/env python3
import matplotlib
print("matplotlib.__version__ {}".format(matplotlib.__version__))
import matplotlib.pyplot as plt
import numpy as np
default_size_inch = (9, 6)
showThird = False
def onpress(event):
global fig, ax1, ax2, ax3, showThird
if event.key == 'x':
showThird = not showThird
if showThird:
fig.set_size_inches(default_size_inch[0]+3, default_size_inch[1], forward=True)
plt.subplots_adjust(right=0.85) # leave a bit of space on the right
ax3.set_visible(True)
ax3.set_axis_on()
else:
fig.set_size_inches(default_size_inch[0], default_size_inch[1], forward=True)
plt.subplots_adjust(right=0.9) # default
ax3.set_visible(False)
ax3.set_axis_off()
fig.canvas.draw()
def main():
global fig, ax1, ax2, ax3
xdata = np.arange(0, 101, 1) # 0 to 100, both included
ydata1 = np.sin(0.01*xdata*np.pi/2)
ydata2 = 10*np.sin(0.01*xdata*np.pi/4)
fig = plt.figure(figsize=default_size_inch, dpi=120)
ax1 = plt.subplot2grid((3,3), (0,0), colspan=2, rowspan=2)
ax2 = plt.subplot2grid((3,3), (2,0), colspan=2, sharex=ax1)
ax3 = plt.subplot2grid((3,3), (0,2), rowspan=3)
ax3.set_visible(False)
ax3.set_axis_off()
ax1.plot(xdata, ydata1, color="Red")
ax2.plot(xdata, ydata2, color="Khaki")
fig.canvas.mpl_connect('key_press_event', lambda event: onpress(event))
plt.show()
# ENTRY POINT
if __name__ == '__main__':
main()
如何找到由 ax1 和 ax2 轴表示的子图的大小?
How do I find the size of the subplots represented by ax1 and ax2 axes?
推荐答案
有关 bbox
的工作原理的完整说明,请参见此处.每个轴对象都适合一个边界框.您需要做的就是获取轴边界框的高度和宽度.ax_h, ax_w = ax.bbox.height, ax.bbox.width
For the full explanation of how bbox
works refer to here. Each of your axes object fits in a bounding box. All you need to do is to get the height and width of your axis bounding box.ax_h, ax_w = ax.bbox.height, ax.bbox.width
您可以使用 bbox.transformed
方法转换为图形坐标.例如:ax_h = ax.bbox.transformed(fig.gca().transAxes).height
You can transform to figure coordinates by using bbox.transformed
method. For example:ax_h = ax.bbox.transformed(fig.gca().transAxes).height
这篇关于Matplotlib 获取子图(轴)大小?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!