holoviews.operation.datashader.datashade()が適用される曲線を含むholoviews.DynamicMapと一緒にパイプを通るデータフローがありますが、ズームツールを使用すると、ビューは(静的データに関して)リサンプリングされません。私のデータの非常にピクセル化された視覚化に。このリサンプリングを有効にするには、何をする必要がありますか?
python3を使用してjupyterノートブックですべてを実行します
holoviews.DynamicMapを静的データだけでセットアップし、パイプを実行していない場合、正しく機能します。
パイプを(使用せずに)充填し始めると、リサンプリングは実行されなくなります。(パイプは一切使用していません)
問題シナリオ:
(jupyterノートブックの3つのセル)
(1)インポート
import time
import numpy as np
import holoviews as hv
from holoviews.operation.datashader import datashade
from holoviews import opts
from holoviews.streams import Pipe
hv.extension('bokeh')
(2)パイプとプロットのセットアップ
#no of samples
N=100000
pipe2 = Pipe(data=[])
data_dmap = hv.DynamicMap(hv.Curve, streams=[pipe2])
data_dmap_opt = datashade(data_dmap, streams=[hv.streams.RangeXY])
data_dmap_opt.opts(width=900,xlim=(0, N),ylim=(0, 1))
(3)データストリームを生成する
def makeBigData(N):
x = np.arange(N)
y = np.random.rand(N)
while True:
time.sleep(1)
y = np.random.rand(N)
pipe2.send((x,y))
デバッグシナリオ:
セルの代替(2)
(代替2)静的プロットを使用したパイプとプロットのセットアップ
#default Data
N=100000
x = np.arange(N)
y = np.random.rand(N)
pipe2 = Pipe(data=[])
data_dmap = hv.DynamicMap(hv.Curve((x,y)))
data_dmap_opt = datashade(data_dmap, streams=[hv.streams.RangeXY])
data_dmap_opt.opts(width=900,xlim=(0, 100000),ylim=(0, 1))
(これは、セル(3)が実行されない限り機能し、その後、この代替手段は機能しなくなります)
期待される結果:
ノイズでプロットを継続的に更新(後の段階で実際のデータを使用)
したがって、実際のグラフは画像にサンプリングされます。サンプリングを拡大すると、実際のビューに調整する必要があります。
実際の結果:
ズームインしても、画像へのサンプリングの調整はトリガーされません。
あなたが抱えている問題は、while
ループから更新をトリガーすると、カーネルが永続的にビジーになることです。つまり、リサンプリングするように指示するJSから到着するイベントに応答するためにカーネルが解放されることはありません。パイプ上のイベントを何らかの形で非同期にスケジュールする必要があります。ノートブックでは、竜巻のPeriodicCallbackを使用してこれを行うことができます。例:
from tornado.ioloop import PeriodicCallback
from tornado import gen
N = 100
x = np.arange(N)
@gen.coroutine
def f():
y = np.random.rand(N)
pipe.send((x, y))
cb = PeriodicCallback(f, 1000)
cb.start()
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加