Python + Plotly: как рисовать линии разной ширины - PullRequest
1 голос
/ 03 апреля 2020

Я написал программу, которая читает набор имен, затем создает график.

Линии графика должны быть тоньше или толще в зависимости от массива весов.

Моя программа рисует + 100 ребер на графике, поэтому мне нужна помощь:

edge_x и edge_y содержит информацию о ребре. массив весов называется weight.

Это часть моего кода, которая рисует линии

edge_trace = go.Scatter(
    x=edge_x, y=edge_y,
    line=dict(width=0.8, color='#888'),  ### doesnt accept array width
    hoverinfo='none',
    mode='lines'
)

также, эти линии должны быть в шкале зеленого цвета, например, в зависимости от веса. Я не могу добавить одну за другой строки в коде, потому что это должно работать для разных записей. }

Как я могу это сделать?

MWE:

import plotly.graph_objects as go
import networkx as nx
G = nx.random_geometric_graph(20, 0.125)

edge_x = []
edge_y = []
for edge in G.edges():
    x0, y0 = G.nodes[edge[0]]['pos']
    x1, y1 = G.nodes[edge[1]]['pos']
    edge_x.append(x0)
    edge_x.append(x1)
    edge_x.append(None)
    edge_y.append(y0)
    edge_y.append(y1)
    edge_y.append(None)

edge_trace = go.Scatter(
    x=edge_x, y=edge_y,
    line=dict(width=0.5, color='#888'),
    hoverinfo='none',
    mode='lines')

node_x = []
node_y = []
for node in G.nodes():
    x, y = G.nodes[node]['pos']
    node_x.append(x)
    node_y.append(y)

node_trace = go.Scatter(
    x=node_x, y=node_y,
    mode='markers',
    hoverinfo='text',
    marker=dict(
        showscale=True,
        colorscale='YlGnBu',
        reversescale=True,
        color=[],
        size=10,
        colorbar=dict(
            thickness=15,
            title='Node Connections',
            xanchor='left',
            titleside='right'
        ),
        line_width=2))
fig = go.Figure(data=[edge_trace, node_trace],
             layout=go.Layout(
                title='<br>Network graph made with Python',
                titlefont_size=16,
                showlegend=False,
                hovermode='closest',
                margin=dict(b=20,l=5,r=5,t=40),
                annotations=[ dict(
                    text="Python code: <a href='https://plotly.com/ipython-notebooks/network-graphs/'> https://plotly.com/ipython-notebooks/network-graphs/</a>",
                    showarrow=False,
                    xref="paper", yref="paper",
                    x=0.005, y=-0.002 ) ],
                xaxis=dict(showgrid=False, zeroline=False, showticklabels=False),
                yaxis=dict(showgrid=False, zeroline=False, showticklabels=False))
                )
fig.show()

фактический вывод для ввода моих данных

how does it show with a graph

желаемый выход

how does it should show

...