Estoy tratando de dibujar un gráfico con bibliotecas de gráficos y quiero establecer un ancho específico de cada línea.

Este es mi código.


x_link = [125, 257, None, 125, 787, None]
y_link = [383, 588, None, 383, 212, None]
z_link = [65, 85, None, 65, 526, None]

link_size = [3,6]

trace1= go.Scatter3d(
                x = x_link, 
                y = y_link,
                z = z_link,
                line=dict(
                    color='#0061ff',
                    width=link_size
                )
)

Pero plantea este error.

Valor no válido del tipo 'builtins.list' recibido para la propiedad 'ancho' de scatter3d.line Valor recibido: [3, 6]

La propiedad 'ancho' es un número y puede especificarse como: - Un int o flotante en el intervalo [0, inf]

Entonces, ¿hay alguna manera de establecer el ancho específico de cada línea?

Gracias.

1
Kaow 11 oct. 2019 a las 08:55

3 respuestas

La mejor respuesta

Tendrá que agregar trazas individuales para que su conjunto de datos haga esto ya que line=dict(width) solo toma un solo argumento y no una matriz de algún tipo. Y eso puede ser un mucho trabajo para conjuntos de datos más grandes . Pero si cambia su conjunto de datos de lists a una lista de listas , puede tener en cuenta aún más puntos de datos . Entonces, con un poco de manipulación de datos puede convertir esto:

x_link = [125, 257, None, 125, 787, None]
y_link = [383, 588, None, 383, 212, None]
z_link = [65, 85, None, 65, 526, None]

En esto:

x_link = [[125, 257, None], [125, 787, None]]
y_link = [[383, 588, None], [383, 212, None]]
z_link = [[65, 85, None], [65, 526, None]]

Y ejecuta este código:

import plotly.graph_objects as go
from plotly.offline import init_notebook_mode, iplot

x_link = [[125, 257, None], [125, 787, None]]
y_link = [[383, 588, None], [383, 212, None]]
z_link = [[65, 85, None], [65, 526, None]]

# figure formatting
colors=['red', 'green']
link_size = [2,12]

# make multiple traces
traces={}
for i in range(0, len(x_link)):
    traces['trace_' + str(i)]=go.Scatter3d(x = x_link[i], 
                                           y = y_link[i],
                                           z = z_link[i],
                                           line=dict(
                                                color=colors[i],
                                                width=link_size[i]))
data=list(traces.values())

# build and plot figure
fig=go.Figure(data)
fig.show()

Para obtener esta trama:

enter image description here

2
vestland 11 oct. 2019 a las 09:14

Debe realizar múltiples seguimientos y especificar el ancho de cada uno:

x_link = [125, 257, None, 125, 787, None]
y_link = [383, 588, None, 383, 212, None]
z_link = [65, 85, None, 65, 526, None]

link_size = [3,6]

trace1= go.Scatter3d(
                x = x_link[:3], 
                y = y_link[:3],
                z = z_link[:3],
                line=dict(
                    color='green',
                    width=link_size[0]
                )
)

trace2= go.Scatter3d(
                x = x_link[3:], 
                y = y_link[3:],
                z = z_link[3:],
                line=dict(
                    color='red',
                    width=link_size[1]
                )
)

fig = go.Figure(data=[trace1, trace2])
2
Mykola Zotko 11 oct. 2019 a las 07:25

Esta es la documentación de lo que está intentando hacer https://plot.ly/python/ referencia / # línea de dispersión

La línea solo acepta un valor único para el ancho, no una matriz de valores, a diferencia de lo que le ha dado.

Intente pasar solo 6 y no debería dar un error.

1
Sanil Khurana 11 oct. 2019 a las 06:25
58335021