2013-04-23 87 views
0

难以标出按文本/名称字段和日期范围分组的值。问题是,尽管我可以按名称进行分组,并为某些日期范围生成图表,但有些分组包含缺少日期值(仅仅是整个数据集的性质)。matplotlib:值错误x和y有不同的尺寸

也就是说,我可能很好地为某些分组值计算了date_range('10/1/2013','10/31/2013'),但有些情况下在该范围内不是'10/15/2013',因此会抛出本帖标题中提到的错误。

感谢您的任何意见!

plt.rcParams['legend.loc'] = 'best' 

    dtable = pd.io.parsers.read_table(str(datasource), sep=',') 
    unique_keys = np.unique(dtable['KEY']) 

    index = date_range(d1frmt, d2frmt) 
    for key in unique_keys: 

     values = dtable[dtable['KEY'] == key] 

     plt.figure() 

     plt.plot(index, values['VAL']) <--can fail if index is missing a date 

     plt.xlim(xmin=d1frmt,xmax=d2frmt) 
     plt.xticks(rotation=270) 
     plt.xticks(size='small') 
     plt.legend(('H20')) 
     plt.ylabel('Head (ft)') 
     plt.title('Well {0}'.format(key)) 
     fig = str('{0}.png'.format(key)) 

     out = str(outputloc) + "\\" + str(fig) 

     plt.savefig(out) 
     plt.close() 

回答

0

必须有一个日期列,或索引,在你dtable。否则,您不知道values['Val']中的哪一个属于哪个日期。

如果这样做,有两种方法。

既然你让基于密钥的一个子集,您可以使用该子集的索引(如果它的日期时间!):

plt.plot(values.index.to_pydatetime(), values['VAL']) 

或重新索引子集到你的“目标”范围“:

values = values.reindex(index) 
plt.plot(index.to_pydatetime(), values['VAL']) 

默认情况下,重新索引插入NaN值作为丢失的数据。

,如果你给一个工作例如,它会更容易,它有点难以回答不知道你的数据帧是什么样子。

+0

oooh,这看起来很有前途。感谢您的意见和示例!是的,有一个日期时间列 - .csv数据源包括:'KEY','DATEREAD'和'VAL'。今天早上我会试一试你的建议。 – user2309282 2013-04-23 10:06:32

+0

再次感谢您的输入RK。我能够得到你的一些建议。事实证明,我一直遇到的许多问题是由于在将事情写入/读取到.csv文件时出现了一些奇怪的值格式。我的大多数问题都是通过简单地使用DataFrames来解决问题。另外,如果我简单地将源数据更改为由NaN组成,那么所有绘图都是完美的! – user2309282 2013-04-25 02:39:21