matplotlib:fill_between函数,如何'插值'和'其中'正确?

时间:2015-08-10 03:15:45

标签: python matplotlib

带有matplotlib的折线图的值数组长度可能不规则,例如:

[18,17,0,0,2]
[6,4,0,0]
[3]

这些是时间线上的值,最后一个是最新值,每个值对应一周。因此,这意味着第二个用户比第一个用户加入的时间晚了一个星期,而最后一个用户只加入了上一周。

为了绘制折线图,​​我使用None值填充较小的数组(与fill_between无关)。

[18, 17, 0, 0, 2]
[None, None, None, None, 3]
[None, 6, 4, 0, 0]

我正在使用interpolate=True,因为如果值变为零,我需要填充曲线。 然而,这具有意想不到的效果,对于后来开始的人来说,填充也将插值,从0开始到实际值。 fill_between how it looks like now

如果有实际值,我需要它才能填充空格: should be

可以这样做吗?我查看了docs,它说明了where数组。

这是给定图表的where数组的结构:

[True, True, False, False, True, False]
[False, True, True, False, False, False]
[False, False, False, False, True, False]

正如你所看到的,我为第二个值行设置了第一个元素为False,但由于" interpolate=True,它将开始填充......

(颜色代码:第一行蓝色,第二行绿色,第三个红色)

希望任何天使都可以为此提供帮助....

以下是填充的实际代码:

for i, values in enumerate(time_series):
    ax.plot(x, y[i], ',-', label=label, color=linecolor, markersize=8, fillstyle="full",linewidth=1.5, clip_on=True, zorder=200)
    ax.fill_between(x, 0, zero_y, where=where, color=fillcolors[i], alpha=0.8, edgecolor="white", zorder=zorder[i], interpolate=True)

请注意fill_between在使用None值时实际崩溃...我需要"翻译" None值为0 ......这可能使问题更加复杂......

1 个答案:

答案 0 :(得分:0)

内部mpl将您的列表转换为 foreach (Tripclass Trip in TripsByTripIds ) { ImageButton imageButton = new ImageButton(); imageButton.ImageUrl = "~/" +Trip.CorridorName+"/"+Trip.Time+"/"+Trip.ImgFileName; imageButton.Height = Unit.Pixel(100); imageButton.Style.Add("padding", "5px"); imageButton.Width = Unit.Pixel(100); imageButton.Click += new ImageClickEventHandler(imageButton_Click); AMSPanel1.Controls.Add(imageButton); AMSPanel1.Height = Unit.Pixel(860); } protected void imageButton_Click(object sender, ImageClickEventArgs fi) { testimage.ImageUrl = ((ImageButton)sender).ImageUrl; lblTime.Text = Trip.Time; lblLocation.Text = Trip.Location; //can't access trip object here } 。 “非数字”(可用于缺失数据)的正确值为import requests from urllib2 import urlopen import csv import pandas as pd from pandas import DataFrame import datetime import pandas.io.data YahooUrl = 'http://ichart.yahoo.com/table.csv?s=' start_month = 1 - 1 start_day = 1 start_year = 2010 end_month = 12 - 1 end_day = 31 end_year = 2014 Start_ApiMonth = '&a=%s' %(start_month) Start_ApiDay = '&b=%s' %(start_day) Start_ApiYear = '&c=%s' %(start_year) End_ApiMonth = '&d=%s' %(end_month) End_ApiDay = '&e=%s' %(end_day) End_ApiYear = '&f=%s' %(end_year) interval = 'm' ApiInterval = '&g=%s' %(interval) ApiStatic = '&ignore=.csv' Ticker = raw_input("What is the ticker > ") Website = urlopen(YahooUrl + Ticker + Start_ApiMonth + Start_ApiDay + Start_ApiYear + End_ApiMonth + End_ApiDay + End_ApiYear + ApiInterval + ApiStatic) Info = Website.read() output = open('output.csv','wb') wr = csv.writer(output, dialect='excel') for item in Info: wr.writerow(item) print Info 。用np.ndarray替换所有np.nan将解决问题。