2017-01-15 11 views
0

Bokehを使用して2行を塗り潰そうとしています。私の2つのデータセットには、NaNのセクションが含まれています。このパッチは、データの最後のセクションについて正しく表示されますが、NaNブロックの前のセクションでは失敗します。Bokeh patch()グリフメソッドがNaNで2行の塗りつぶしに失敗する

enter image description here

私は充填の間の最終区間であるようにしてプロットする最初の二つの平行線セクションを希望:

from bokeh.plotting import figure, output_file, show 
import numpy as np 

p = figure(plot_width=400, plot_height=300) 

mx = np.array(np.random.randint(20, 25, 30), dtype=float) 
mx[7:11] = np.nan 
mx[19:23] = np.nan 

mn = mx-10 

x = np.arange(0, len(mn)) 

wX = np.append(x, x[::-1]) 
wY = np.append(mx, mn[::-1]) 

p.patch(wX, wY) 

show(p) 

これは次の図を生成する次の例は、問題を示しますプロット。代わりに、これらのセクションは、ラインセグメント自体にパッチを適用しているようです。私は、データの連続する各セクションをループすることによって個々のパッチを作成するソリューションを持っていますが、100を超えるパッチでは遅すぎます。

答えて

0

私が知る限り、Bokehはあなたが正しく提供するパッチをレンダリングします。 NaNを渡すと個々のパッチが分離されることに注意してください。つまり、何も追加しないNaNを複数連続して渡すのはちょっと変です。また、NaNのY座標と共に有効なX座標を指定するのはちょっと混乱します。

Just as with line() and multi_line(), NaN values can be passed to patch() and patches() glyphs. In this case, you end up with single logical patch objects, that have multiple disjoint components when rendered

http://bokeh.pydata.org/en/latest/docs/user_guide/plotting.html#id1

私はXを追加した、yはあなたのコードを実行しているときに私が取得する最初のパッチに調整します。おそらくあなたは何か別のものを意図しているかもしれませんが、Bokehは指定したものを正しくレンダリングしています。

enter image description here

+0

私の例は、コンテキストの欠如が混乱するかもしれないが、私の問題の単純なケースを提示することを意図しました。私のアプリケーションは、上の行(最大日気温)と下の行(毎日の気温の最小値)の2つの行を持つ時系列データ(したがって連続するx軸値)です。私はこれらの2つの行の間に記入したいと思います。ただし、データがない場合もあります。私はこれらのギャップを保ちたいと思いますが、まだ良いデータのセクションに塗りつぶしを適用しています。私の例では、3番目のセクションのように、1番目と2番目のセクションを埋める必要があります。 – PJW