matplotlib的重叠子图

时间:2018-10-03 11:25:43

标签: python matplotlib

我正在尝试在matplotlib中使用5行和2列的子图。     变量X表示字典。 [*X]提供了字典中可用的键。     每个密钥应位于不同的行中。

idx = 0
axes = []
for key, val in X.items():
    axes.append(plt.subplot(len([*X]),1,idx+1))
    axes[idx].scatter(X[key], Y[key], color='r')
    axes[idx].set_title(key)
    axes[idx].set_xlabel(title)
    axes[idx].set_ylabel('QoS')#, color='g')
    axes[idx].spines['right'].set_visible(False)
    axes[idx].spines['top'].set_visible(False)
    axes[idx].xaxis.set_ticks_position('bottom')
    axes[idx].yaxis.set_ticks_position('left')
    axes[idx].set_ylim([0,1])
    axes.append(plt.subplot(len([*X]),2,idx+1))
    tmp = idx+1
    axes[tmp].scatter(X[key], Y1[key], color='r')
    axes[tmp].set_title(key)
    axes[tmp].set_xlabel(title)
    axes[tmp].set_ylabel('Power', color='g')
    axes[tmp].spines['right'].set_visible(False)
    axes[tmp].spines['top'].set_visible(False)
    axes[tmp].xaxis.set_ticks_position('bottom')
    axes[tmp].yaxis.set_ticks_position('left')
    #axes[idx].set_ylim([0,1])
    idx+=1

直觉上,我认为应该这样,假设len([*X])为5。

 511, 521
 512, 522
 513, 523
 513, 523
 514, 525

在当前设置下,我可以通过这种方式获得它。 enter image description here 我想念什么?

1 个答案:

答案 0 :(得分:1)

这似乎有点令人费解。要了解如何定义子图,请参见In Matplotlib, what does the argument mean in fig.add_subplot(111)?

但是,在这里最好不要单独定义每个子图,而是一次创建它们。

fig, axes = plt.subplots(nrows=5, ncols=2)
for (key, val), axrow in zip(X.items(), axes):
    axrow[0].scatter(X[key], Y[key])
    axrow[1].scatter(X[key], Y1[key])