#python #matplotlib #subplot
#python #matplotlib #подзаголовок
Вопрос:
Я хочу нарисовать 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. Это всего лишь один из графиков, и можно копировать этот график для других подзаголовков.
Ответ №1:
Если я правильно понимаю, это решит вашу проблему. Вы можете настроить диапазон осей с 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)
Комментарии:
1. Большое вам спасибо. Но я хочу добавить две оси y. Левая ось y основана на p, а правая ось y основана на b. Я думаю, что этот код не показывает две оси.
2. Хорошо, без проблем, я отредактирую код. Я надеюсь, что это будет полезно 🙂