在Matplotlib中按日期更改xlim

jen*_*ryb 7 python datetime graph matplotlib axis-labels

我试图用Python制作一个视觉上吸引人的图形.我在这里使用Randal Olson的示例http://www.randalolson.com/2014/06/28/how-to-make-beautiful-data-visualizations-in-python-with-matplotlib/并尝试进行一些调整.

我的数据很简单,

dispute_percentage
Out[34]: 

2015-08-11    0.017647
2015-08-12    0.004525
2015-08-13    0.006024
2015-08-14    0.000000
2015-08-15    0.000000
2015-08-17    0.000000
Run Code Online (Sandbox Code Playgroud)

问题是数据在2015年2月开始加载,我想在2015年4月开始显示.

这是我的代码

from __future__ import division
from collections import OrderedDict
import pandas as pd
from collections import Counter
from pylab import * 
import datetime as datetime 
dispute_percentage.plot(kind = 'line')
plt.xlabel('Date')
plt.ylabel('Percent')
plt.title('Percent Disputes In FY2015')

# Remove the plot frame lines. They are unnecessary chartjunk.    
ax = plt.subplot(111)    
ax.spines["top"].set_visible(False)    
ax.spines["bottom"].set_visible(False)    
ax.spines["right"].set_visible(False)    
ax.spines["left"].set_visible(False) 


# Ensure that the axis ticks only show up on the bottom and left of the plot.    
# Ticks on the right and top of the plot are generally unnecessary chartjunk.    
ax.get_xaxis().tick_bottom()    
#ax.get_yaxis().tick_left()    

# Limit the range of the plot to only where the data is.    
# Avoid unnecessary whitespace.   
datenow = datetime.datetime.now
dstart = datetime(2015,4,1)
print datenow 
plt.ylim(0, .14)    
plt.xlim(dstart, datenow)    
Run Code Online (Sandbox Code Playgroud)

xlim是我正在努力的方向.我收到了错误

File "C:/Mypath/name.py", line 52, in <module>
    dstart = datetime(2015,4,1)

TypeError: 'module' object is not callable
Run Code Online (Sandbox Code Playgroud)

如果有人可以帮助这个将是伟大的.此外,任何有关试图使其更漂亮的意见也将受到赞赏.

tmd*_*son 5

你需要datetime.datetime.now()在最后用括号调用,因为dstart你需要使用模块的datetime方法datetime:datetime.datetime(2015,4,1)

import datetime

datenow = datetime.datetime.now()
dstart = datetime.datetime(2015,4,1)
Run Code Online (Sandbox Code Playgroud)

编辑: 设置为xticks本月的第一天(感谢@AndyKubiak):

firsts=[]
for i in range(dstart.month, datenow.month+1):
    firsts.append(datetime.datetime(2015,i,1)) 
plt.xticks(firsts)
Run Code Online (Sandbox Code Playgroud)

  • `firsts = []; 对于范围内的i(1,13):firsts.append(datetime.datetime(2015,i,1))` (2认同)