8

行を示すDatashaderサンプルノートブックに従うと、入力は Pandas DataFrame です (ただし、Dask DataFrame も同様に機能するようです)。私のデータは NumPy 配列にあります。Datashader を使用して、最初に DataFrame に配置せずに NumPy 配列から線をプロットできますか?

行グリフのドキュメントは、これが可能であることを示しているようですが、例は見つかりませんでした。リンクしたノートブックの例Canvas.lineは、ドキュメントで見つけられなかったものを使用しています。

4

2 に答える 2

2

OrderedDictandメソッドは、xarray.concat多くのデータ曲線に適用すると非常に遅くなりました。次の例は、はるかに高速な方法を示しています。タイミングと詳細な議論については、この GitHub の問題を参照してください。

import pandas as pd
import numpy as np
import datashader
import bokeh.plotting
import collections
import xarray
import time
from bokeh.palettes import Colorblind7 as palette

bokeh.plotting.output_notebook()

# create some data worth plotting
nx = 50
x = np.linspace(0, np.pi * 2, nx)
y = np.sin(x)
n = 10000
data = np.empty([n+1, len(y)])
data[0] = x
prng = np.random.RandomState(123)

# scale the data using a random normal distribution
offset = prng.normal(0, 0.1, n).reshape(n, -1)
data[1:] = y
data[1:] += offset

# make some data noisy
n_noisy = prng.randint(0, n,5)
for i in n_noisy:
    data[i+1] += prng.normal(0, 0.5, nx)

dfs = []
split = pd.DataFrame({'x': [np.nan]})
for i in range(len(data)-1):
    x = data[0]
    y = data[i+1]
    df = pd.DataFrame({'x': x, 'y': y})
    dfs.append(df)
    dfs.append(split)

df = pd.concat(dfs, ignore_index=True)   

canvas = datashader.Canvas(x_range=x_range, y_range=y_range, 
                           plot_height=300, plot_width=300)
agg = canvas.line(df, 'x', 'y', datashader.count())
img = datashader.transfer_functions.shade(agg, how='eq_hist')
img

ここに画像の説明を入力

于 2017-02-23T05:09:53.677 に答える