我想用datashader + holoviews绘制一个大图,但是出现错误。
小型且可复制的是:
import holoviews as hv
import pandas as pd
import dask.dataframe as dd
from holoviews.operation.datashader import (
datashade, aggregate, dynspread,
bundle_graph, split_dataframe, regrid
)
from holoviews.element.graphs import layout_nodes
from datashader.layout import forceatlas2_layout, random_layout
hv.extension('bokeh')
targets = [4, 4, 4, 4, 4]
sources = [3, 1, 2, 3, 4]
df = pd.DataFrame({'source': sources, 'target': targets})
edges_df = dd.from_pandas(df, npartitions=3)
graph = layout_nodes(hv.Graph(edges_df), layout=forceatlas2_layout)
forceatlas = bundle_graph(graph, split=False)
pad = dict(x=(-.5, 1.3), y=(-.5, 1.3))
datashade(forceatlas, width=800, height=800) * forceatlas.nodes.redim.range(**pad)
失败
ValueError:没有足够的值可解包(预期3,得到0)
---> 17个图= layout_nodes(hv.Graph(edges_df),layout = forceatlas2_layout)
但是,设置targets = [1, 1, 1, 1, 1]
可以得到一个图。
对于“有问题的” targets
,如果我使用random_layout
而不是forceatlas2,我也会得到一个图。
我很困惑!为什么我会收到该错误以及如何消除该错误?我正在使用datashader 0.7.0。
答案 0 :(得分:0)
尝试将有问题的线路替换为
graph = layout_nodes(hv.Graph(edges_df), layout=forceatlas2_layout, kwargs = {'id': 'index'})
这应该允许应付库内部。