我将始终至少有2个子图,它们应该彼此叠加而不会触及图形区域。它们应该比它们更高更宽。
然后,如果满足某个条件(在这种情况下,如果数据中存在特定类型的峰值),我希望将此峰值绘制在其他两个图右侧的自己的子图上。第三个图应该比它宽。可能有任何数量的这些额外的情节,包括没有。我已经有了我想要绘制的位置,我只是不知道如何让add_subplot做我想做的事。
前两个图表工作正常,我会认为循环中的那个将添加1个宽2个高的第n个子图,但是我得到错误:IndexError:index超出范围。
下面的代码只是试图让事情变得正确(我知道我还没有绘制任何数据)。
fig = pl.figure()
ax1 = fig.add_subplot(2, 1, 1)
ax2 = fig.add_subplot(2, 1, 2)
n = 2
#if there is a peak plot it on this subplot
peak = fig.add_subplot(1, 2, n)
n =+ 1
答案 0 :(得分:1)
您可以使用GridSpec创建两个图。之后,您可以移动这些图表,并根据需要添加第三个图表。在GridSpec对象上调用update
方法时,可以传入参数,告诉它放置整个网格边缘的位置。您可以使用左侧和右侧参数来使子图形具有所需的宽度。
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
peak = True
gs1 = GridSpec(1, 2)
for sub in gs1:
#make axes for two default plots
ax = plt.subplot(sub)
if peak == True:
#move default plots to the left
gs1.update(right = .75)
#add new plot
gs2 = GridSpec(1, 1)
#move plot to the right
gs2.update(left = .8)
ax = plt.subplot(gs2[0, 0])
plt.show()