Почему я не могу построить этот фрейм данных dask с помощью datashader (недостаточно значений для распаковки)?

Я хотел бы построить крупный график с помощью 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 graph = layout_nodes (hv.Graph (Edge_df), layout = forceatlas2_layout)

Однако, задав targets = [1, 1, 1, 1, 1], я получаю сюжет.
Если я использую random_layout вместо forceatlas2, я также получаю сюжет.

Я озадачен! Почему я получаю эту ошибку и как от нее избавиться? Я использую даташейдер 0.7.0.


person Davide Fiocco    schedule 15.04.2019    source источник
comment
Теперь я подозреваю, что это ошибка в библиотеке ... Таким образом, я отправил github.com/pyviz/ datashader / issues / 740   -  person Davide Fiocco    schedule 16.04.2019


Ответы (1)


Попробуйте заменить проблемную строку на
graph = layout_nodes(hv.Graph(edges_df), layout=forceatlas2_layout, kwargs = {'id': 'index'})

Это должно позволить справиться с внутренним устройством библиотеки.

person Davide Fiocco    schedule 16.04.2019