wes*_*pga 3 python matplotlib pandas
我有一个函数,我写了这里显示几个图:
def plot_price_series(df, ts1, ts2):
# price series line graph
fig = plt.figure()
ax1 = fig.add_subplot(221)
ax1.plot(df.index, df[ts1], label=ts1)
ax1.plot(df.index, df[ts2], label=ts2)
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))
ax1.set_xlim(df.index[0], df.index[-1])
ax1.grid(True)
fig.autofmt_xdate()
ax1.set_xlabel('Month/Year')
ax1.set_ylabel('Price')
ax1.set_title('%s and %s Weekly Prices' % (ts1, ts2))
plt.legend()
# Spread
ax2 = fig.add_subplot(222)
ax2.plot(df.index, df[ts2] - df[ts1], label=ts2 + " vs " + ts1 + " spread")
ax2.xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))
ax2.set_xlim(df.index[0], df.index[-1])
ax2.grid(True)
fig.autofmt_xdate()
ax2.set_xlabel('Month/Year')
ax2.set_ylabel('Spread')
ax2.set_title('%s and %s Weekly Spread' % (ts1, ts2))
# Scatter w/ line of least square
ax3 = fig.add_subplot(223)
m, b = np.polyfit(df[ts1], df[ts2], 1)
ax3.plot(df[ts1], m * df[ts1] + b, '-k')
ax3.scatter(df[ts1], df[ts2])
ax3.grid(True)
ax3.set_xlabel(ts1)
ax3.set_ylabel(ts2)
ax3.set_title('%s and %s Scatter Plot' % (ts1, ts2))
ax4 = fig.add_subplot(224)
corr = pd.rolling_corr(df[ts1], df[ts2], window=10)
ax4.plot(df.index, corr)
ax4.xaxis.set_major_formatter(mdates.DateFormatter('%b %Y'))
ax4.set_xlim(df.index[0], df.index[-1])
ax4.grid(True)
fig.autofmt_xdate()
ax4.set_xlabel('Month/Year')
ax4.set_ylabel('Price ($)')
ax4.set_title('Rolling 10-week Correlation')
plt.show()
Run Code Online (Sandbox Code Playgroud)
然而,当我运行该功能有效的数据,在xlabel
两个前两个图中,ax1
并ax2
没有显示出来,也不做任何我需要展示的日期值.图表如下:
有关如何解决这个问题的任何想法,以便我可以看到xlabels和x轴值?我尝试了许多其他答案建议figure.tight_layout()
无济于事.
我认为问题在于fig.autofmt_xdate()
.您的日期x轴在不同的子图中都是相同的,并且fig.autofmt_xdate()
倾向于使用sharex
格式,以便日期x轴仅显示在一个子图中.
归档时间: |
|
查看次数: |
1009 次 |
最近记录: |