带有日期的matplotlib子图:无法更改xlim

时间:2018-01-24 19:00:03

标签: python matplotlib

我正在尝试制作一个子图,在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()

2 个答案:

答案 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。