我想绘制 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')
x
和 optimal_policy[1,:-1,0]
是大小为 16 的向量。这只是图中的一个,可以为其他子图复制此图。
答案 0 :(得分:0)
如果我理解正确,这将解决您的问题。您可以使用 min
数组的 max
和 x,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)