当y轴取两个值时使用子图绘制多个图形

时间:2021-01-16 06:41:49

标签: python matplotlib subplot

我想绘制 5 个带有子图的图形,每个图形在哪里,y 轴应显示 2 个值(多个 y 轴)。我正在使用以下代码,但我遇到了一些困难。我不知道如何为每个图形添加标题,如何为所有图形添加一般图例,如何强制每个图形的 x 轴随着步骤 1 增加,y 轴随着步骤 0.5 增加。

fig, ax1 = plt.subplots(3,2,figsize=(10,10))
ax2 = np.array([a.twinx() for a in ax1.ravel()]).reshape(ax1.shape)

x = np.arange(0,16)
curve1 = ax1[0,0].plot(x, optimal_policy[1,:-1,0], label='Optimal p', color='r',marker='o',linestyle='--')
curve2 = ax2[0,0].plot(x, optimal_policy[1,:-1,1], label='Optimal b', color='b',marker='v',linestyle='-.')
ax2[0,0].set_ylabel('b') 
ax1[0,0].set_ylabel('p') 
ax1[0,0].set_ylim(0,4)
ax2[0,0].set_ylim(0,4)

fig.legend(loc='upper right',bbox_to_anchor=(0.5, 0.5))

plt.title('Inventory =1')
plt.xlabel('Time')
ax1[0,0].set_xlabel('Time')

xoptimal_policy[1,:-1,0] 是大小为 16 的向量。这只是图中的一个,可以为其他子图复制此图。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,这将解决您的问题。您可以使用 min 数组的 maxx,y 调整轴范围。

from matplotlib import pyplot as plt
import numpy as np


x = np.arange(0,16)
y1 =  np.random.rand(16,1)*5
y2 =  np.random.rand(16,1)*4

fig, (ax1, ax2) = plt.subplots(2, 1, sharex=False, figsize=(10,10))

ax12 = ax1.twinx() 
l, = ax1.plot(x,y1,'g',label='Optimal p')
l2, = ax12.plot(x,y2,'b',label='Optimal b')


ax22 = ax2.twinx() 
l3, = ax2.plot(x,y1,'g',label='Optimal p')
l4, = ax22.plot(x,y2,'b',label='Optimal b')

ax1.title.set_text('First Plot')
ax2.title.set_text('Second Plot')

ax1.tick_params(axis='y', labelcolor="g")
ax12.tick_params(axis='y', labelcolor="b")
ax2.tick_params(axis='y', labelcolor="g")
ax22.tick_params(axis='y', labelcolor="b")    

ax1.set_xticks(np.arange(0,16,1))
ax2.set_xticks(np.arange(0,16,1))
ax1.set_yticks(np.arange(10)+0.5)
ax2.set_yticks(np.arange(10)+0.5)

plt.legend( handles=[l, l2, l3, l4],loc="upper left", bbox_to_anchor=[0, 1],
           ncol=2, shadow=True, title="Legend", fancybox=True)