我正在尝试制作一个子图,在2个不同的轴上绘制3个时间序列。 我的时间序列从2007年1月到2017年9月(每月一个数据点)。
我的问题是我无法改变x轴的极限。
我尝试了xlim和set_xlim,但它们没有任何效果。
我做错了什么?有什么想法吗?
我的代码示例如下。谢谢!
import numpy as np
import pandas as pd
import datetime as dt
import dateutil
import matplotlib.pyplot as plt
import matplotlib
import matplotlib.ticker as mtick
mystart = dt.date(2007,1,1)
mydates =[mystart]
for i in np.arange(1,130):
mydates.append( mystart +dateutil.relativedelta.relativedelta(months=i))
df=pd.DataFrame()
df['month']=mydates
df['a']= np.arange(1,131)
df['b']=df['a']/2
df['c']=0.25
fig,ax=plt.subplots(2)
ax[0].set_title('My title')
l1 = ax[0].plot_date( df['month'],df['a'], label= 'a (left axis)', color='blue', ls='solid', marker ='')
l2 = ax[0].plot_date( df['month'],df['b'], label= 'b (left axis)',color='red', ls='solid', marker ='')
# THESE BELOW ARE THE TWO LINES I CANNOT GET TO WORK!!!
#plt.xlim(xmin= dt.date(2012,1,31),xmax=dt.date(2017,9,30))
ax[0].set_xlim([dt.date(2012,1,31),dt.date(2017,9,30)], auto=True)
ax[0].grid()
ax2=ax[0].twinx()
l3 = ax2.plot_date( df['month'],df['c']*100 , label= 'some % (right axis)', color='green', ls='solid', marker ='')
fmt = '%.2f%%' # Format you want the ticks, e.g. '40%'
yticks = mtick.FormatStrFormatter(fmt)
ax2.yaxis.set_major_formatter(yticks)
ls=l1+l2+l3
labs=[l.get_label() for l in ls]
ax[0].legend(ls, labs, loc='upper left')
ax[1].set_title('Something else will go here...')
plt.show()
答案 0 :(得分:1)
在创建双轴后设置轴的极限并绘制成轴。
ax2=ax[0].twinx()
l3 = ax2.plot_date( ... )
ax[0].set_xlim( ... )
答案 1 :(得分:0)
我明白了:问题是次要轴。
我必须为ax2重复set_xlim:
ax2.set_xlim([dt.datetime(2012,1,31),dt.datetime(2017,9,30)], auto=True)
我不确定这是不是一个bug,TBH。我原以为创建双轴会复制相同的xlim。