Python Matplotlib图形上未显示线

Python Matplotlib图形上未显示线,python,matplotlib,graph,visualization,subplot,Python,Matplotlib,Graph,Visualization,Subplot,我试图在Matplotlib中的同一绘图上绘制三条线。它们是本年度发票、本年度争议和本年度百分比(即争议/发票) 原始输入是两列日期——一列为记录的争议日期,另一列为记录的发票日期 我使用这些日期统计某一年内每月的争议和发票数量 然后我试着把它画出来,但结果是空的。我开始只是想打印今年的百分比和今年的发票 PercentThisYear = (DisputesFYThisYear/InvoicesFYThisYear).fillna(0.0) #Percent_ThisYear.plot(ki

我试图在Matplotlib中的同一绘图上绘制三条线。它们是本年度发票、本年度争议和本年度百分比(即争议/发票)

原始输入是两列日期——一列为记录的争议日期,另一列为记录的发票日期

我使用这些日期统计某一年内每月的争议和发票数量

然后我试着把它画出来,但结果是空的。我开始只是想打印今年的百分比和今年的发票

PercentThisYear = (DisputesFYThisYear/InvoicesFYThisYear).fillna(0.0)

#Percent_ThisYear.plot(kind = 'line')
#InvoicesFYThisYear.plot(kind = 'line')
plt.plot(PercentThisYear)


plt.xlabel('Date')
plt.ylabel('Percent')
plt.title('Customer Disputes')

# 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) 
ax2 = ax.twinx()
ax2.plot(InvoicesFYThisYear)

# 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.datetime(2015,4,1)
print datenow 
#plt.ylim(0, .14)    
plt.xlim(dstart, datenow)

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

plt.show()
这是输出。。。日期全搞乱了,什么也没印出来。但是轴上的比例看起来是正确的。我做错了什么

如果有帮助的话,这是图表前面的设置

输入如下所示:

InvoicesThisYear
Out[82]: 
7    7529
5    5511
6    4934
8    3552
dtype: int64


DisputesThisYear
Out[83]: 
2    211
1    98
7     54
4     43
3     32
6     29
5     21
8     8
dtype: int64

PercentThisYear
Out[84]: 
1    0.000000
2    0.000000
3    0.000000
4    0.000000
5    0.003810
6    0.005877
7    0.007172
8    0.002252
dtype: float64

Matplotlib无法知道哪些日期与哪些数据点关联。当您仅使用一个参数
y
调用
plot
时,Matplotlib自动假定x值为
范围(len(y))
。您需要将日期作为第一个参数提供给
绘图
。假设InvoicestThisYear是每月发票数量的计数,从1开始到8结束,您可以执行以下操作

import datetime
import matplotlib.pyplot as plt
import pandas as pd
InvoicesFYThisYear = pd.DataFrame([0, 0, 0, 0, 5511, 4934, 7529, 3552])
Disputes = pd.DataFrame([98, 211, 32, 43, 21, 29, 54, 8])
PercentThisYear = (Disputes / InvoicesFYThisYear)
datenow = datetime.date.today()
ax = plt.subplot(111)  
dates = [datetime.date(2015,i,1) for i in xrange(1, 9, 1)]
plt.plot(dates, PercentThisYear)
ax2 = ax.twinx()
ax2.plot(dates, InvoicesFYThisYear)
dstart = datetime.datetime(2015,4,1)
plt.xlim(dstart, datenow)
plt.xticks(dates, dates)
plt.show()
如果您的数据是一个系列,并且索引是一个表示月份的整数,那么您所要做的就是将索引改为datetime对象。熊猫系列的
plot
方法将从那里自动处理事情。以下是您可以如何做到这一点:

Invoices = pd.Series((211, 98, 54, 43, 32, 29, 21, 8), index = (2, 1, 7, 4, 3, 6, 5, 8))
dates = [datetime.date(2015, month, 1) for month in Invoices.index]
Invoices.index = dates
Invoices.plot()

谢谢你的回答。你知道用数列作图的方法吗?因为我的左列与右边的计数相连?或者可能将序列分割成列表?@jenryb,我编辑了我的答案,以解决序列的使用问题。有一个开放的PR,它增加了从传入的
序列
对象提取索引的功能。