Matplotlib线图移动X轴值和刻度标签

时间:2016-05-16 15:55:50

标签: python python-3.x pandas matplotlib

鉴于以下内容:

import pandas as pd
import numpy as np
%matplotlib inline
df = pd.DataFrame(
        {'YYYYMM':[201603,201503,201403,201303,201603,201503,201403,201303],
         'Count':[5,6,2,7,4,7,8,9],
         'Group':['A','A','A','A','B','B','B','B']})
df['YYYYMM']=df['YYYYMM'].astype(str).str[:-2]
t=df.pivot_table(df,index=['YYYYMM'],columns=['Group'],aggfunc=np.sum)

fig, ax = plt.subplots(1,1)
t.plot(ax=ax)

enter image description here

我想将xaxis tick_labels(年)和相应的行移到右侧,为yaxis ticks和{{1}腾出空间}。 我尝试了这个(在labels之后:

t.plot(ax=ax)

但它只改变了界限:

enter image description here

提前致谢!

2 个答案:

答案 0 :(得分:1)

需要恢复为int,然后使用FormatStrFormatter

from matplotlib.ticker import FormatStrFormatter

df['YYYYMM'] = df['YYYYMM'].astype(str).str[:-2].astype(int)
t = df.pivot_table(df, index=['YYYYMM'], columns=['Group'], aggfunc=np.sum).loc[:, 'Count']

fig, axes = plt.subplots(1, 1)
margin = 0.5
t.plot(ax=axes, xticks=t.index.tolist(), xlim=(t.index.min()-margin, t.index.max()+margin), ylim=(t.min().min()-margin, t.max().max()+margin))
axes.xaxis.set_major_formatter(FormatStrFormatter('%.0f'))
plt.show()

enter image description here

包括.loc[:, 'Count']会让你有一个不同的传奇。

答案 1 :(得分:1)

你可以这样做:

import datetime
dates = pd.to_datetime(t.index)
plt.plot(dates, t.Count.A)
plt.plot(dates, t.Count.B)  
plt.xlim(datetime.date(2012,1,1), datetime.date(2017,1,1))
plt.show()