![](/img/trans.png)
[英]In Matplotlib, what does the argument mean in fig.add_subplot(111)?
[英]Why does matplotlib.gridspec's tight_layout not work correctly with pyplot.subplot whereas it does with fig.add_subplot?
我正在尝试使用gridspec创建两个彼此相邻的子图(实际图更为复杂,但这是基本思想)。 我正在使用plt.subplot
创建子图,但这似乎无法产生预期的结果。 我仅在图的右侧获得第二个子图,而没有获得第一个子图。
另一方面,如果我使用fig.add_subplot
创建了子图,尽管得到了tight_layout警告,该图仍可以正确显示。 我对此行为感到有些惊讶,因为pyplot的subplot函数在内部调用了fig.add_subplot(然后进行一些检查以查看该子图是否已经存在-我猜是吗?)。 这是仅产生最右边子图的代码。 切换注释以使用plt.gcf().add_subplot
可使注释按预期工作。
from matplotlib import gridspec,pyplot as plt
gs = gridspec.GridSpec(1,1)
ax1 = plt.subplot(gs[0,0])
# ax1 = plt.gcf().add_subplot(gs[0,0])
ax1.plot(range(3),range(3))
gs.tight_layout(plt.gcf(),rect=[0,0,0.45,1])
gs = gridspec.GridSpec(1,1)
ax1 = plt.subplot(gs[0,0])
# ax1 = plt.gcf().add_subplot(gs[0,0])
ax1.plot(range(3),range(3))
gs.tight_layout(plt.gcf(),rect=[0.55,0,1,1])
plt.show()
我是在做错什么,还是我在这里想念什么? 作为参考,这是pyplot.subplot的主要作用:
fig = gcf()
a = fig.add_subplot(*args, **kwargs)
bbox = a.bbox
byebye = []
for other in fig.axes:
if other==a: continue
if bbox.fully_overlaps(other.bbox):
byebye.append(other)
for ax in byebye: delaxes(ax)
return a
我的问题是:为什么使用pyplot.subplot不能产生与fig.add_subplot相同的结果?
subplot
作用是检查重叠的图并删除它们(如果存在)。 您的第二plt.subplot
图与第一plt.subplot
图重叠,因此您的第二个plt.subplot
将删除第一个。 Figure.add_subplot
不会删除重叠的子图。
请注意,您正在创建填充整个图形的子图:
gs = gridspec.GridSpec(1,1)
ax1 = plt.subplot(gs[0,0])
这是1x1网格中的子图,因此它将填充整个图形并与以前的任何子图重叠。
顺便说一句,这个问题与可以正常工作的tight_layout
无关。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.