在Datashader示例notebook demonstrating lines之后,输入是一个Pandas DataFrame(尽管似乎Dask DataFrame也能正常工作)。我的数据是在NumPy数组中。我可以使用Datashader绘制NumPy数组中的行而不先将它们放入DataFrame中吗?
line glyph的文档似乎表明这是可能的,但我没有找到一个例子。我链接到的示例笔记本使用了我在文档中找不到的Canvas.line
。
答案 0 :(得分:3)
我没有找到在NumPy数组中绘制数据的方法,而没有先将其放入DataFrame中。如何做到这一点并不是特别直观,似乎Datashader要求列标签是非数字字符串,因此可以使用df.col_label
语法(而不是df[col_label]
语法调用它们,也许是这是一个很好的理由。)
使用当前系统,我必须执行以下操作才能将NumPy数组放入DataFrame,并使用Datashader接受的列标签。
df = pd.DataFrame(data=data.T)
data_cols = ['c{}'.format(c) for c in df.columns]
df.columns = data_cols
df['x'] = x_values
y_range = data.min(), data.max()
x_range = x_values[0], x_values[-1]
canvas = datashader.Canvas(x_range=x_range, y_range=y_range,
plot_height=300, plot_width=900)
aggs = collections.OrderedDict((c, canvas.line(df, 'q', c)) for c in data_cols)
merged = xarray.concat(saxs_aggs.values(), dim=pd.Index(cols, name='cols'))
saxs_img = datashader.transfer_functions.shade(merged.sum(dim='cols'),
how='eq_hist')
请注意,data_cols
变量非常重要,而不仅仅是df.columns
,因为它必须排除x
列(最初并不直观)。