使用Datashader绘制NumPy数组数据的最佳方法是什么?

时间:2017-02-10 14:59:46

标签: python numpy dataframe datashader

Datashader示例notebook demonstrating lines之后,输入是一个Pandas DataFrame(尽管似乎Dask DataFrame也能正常工作)。我的数据是在NumPy数组中。我可以使用Datashader绘制NumPy数组中的行而不先将它们放入DataFrame中吗?

line glyph的文档似乎表明这是可能的,但我没有找到一个例子。我链接到的示例笔记本使用了我在文档中找不到的Canvas.line

1 个答案:

答案 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列(最初并不直观)。

以下是使用散景添加轴的结果示例。 enter image description here