es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Intentando separar las dimensiones de mis nodos de coordenadas XYZ en un grafo 3D de NetworkX.

Soy nuevo en Python e intenté crear un gráfico de red en 3D utilizando un archivo CSV, con NetworkX y Plotly. Usé la función Spring3D e intenté separar las dimensiones del arreglo que se generó como en un tutorial que vi en Deepnote, pero no puedo hacerlo, probablemente porque mis datos de los nodos no se leen como enteros, aunque especifiqué el tipo de nodos int en mis argumentos… o tal vez porque tengo que convertir mis datos a una matriz o un arreglo. (ver mis capturas de pantalla a continuación).

Cuando llamo a uno de mis nodos, me devuelve un error de clave, pero funciona cuando lo llamo como una cadena spring_3D ['4']. No sé si este problema está relacionado con el hecho de que no puedo asignar mis coordenadas a mis nodos, pero lo supongo. Realmente no sé y he intentado de muchas formas (como usar diferentes formas de importar mis datos con csv.reader y with open logré ver mis nodos como enteros con este método np.array([[int(e) for e in row] for row in csv.reader(f, delimiter=',')]]) pero no funcionó en el siguiente paso.

También intenté agregar nodos manualmente pero sin éxito. Utilicé el método read.adjlist pero probablemente sea lo mismo. Creo que la respuesta probablemente sea bastante obvia.

Trabajo en Python 3.6 con Jupyter Notebook y Anaconda.

G = nx.read_adjlist('clean Passerelles-mentales final 1bisfinal.csv', delimiter = ',', nodetype = int )

spring_pos = nx.spring_layout(G, seed=3) 
nx.draw_networkx(G, with_labels = True)

spring_3D = nx.spring_layout(G, dim=3, seed=18)

x_nodes = [spring_3D[i][0] for i in range(Num_nodes)]# coordenadas x de los nodos
y_nodes = [spring_3D[i][1] for i in range(Num_nodes)]# coordenadas y
z_nodes = [spring_3D[i][2] for i in range(Num_nodes)]# coordenadas z

Recibí un error de clave.

Imagen 1
Imagen 2

Un ejemplo de lo que estoy intentando hacer: enlace

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás teniendo algunos problemas al crear un gráfico de red 3D utilizando NetworkX y Plotly en Python. Según el fragmento de código que proporcionaste, parece que estás importando correctamente tus datos desde un archivo CSV y generando un objeto de gráfico en NetworkX. Sin embargo, cuando intentas crear tu diseño en 3D utilizando la función Spring3D y asignar coordenadas a tus nodos, estás experimentando algunos errores.

    Un problema que mencionaste es que no puedes asignar coordenadas a tus nodos. Esto podría deberse al hecho de que tus datos de nodo no se están leyendo como enteros a pesar de especificar el “nodetype” como int en tus argumentos. También mencionaste que intentaste convertir tus datos en una matriz o un array, pero esto no funcionó para ti. Sin ver los datos en sí y los mensajes de error exactos que recibiste, es difícil solucionar esto aún más.

    Otro problema que mencionaste es que obtienes un Key Error al llamar a uno de tus nodos. Esto posiblemente podría deberse al hecho de que el nodo no está en tu gráfico, o la etiqueta del nodo no es válida (es decir, una cadena no numérica). Mencionaste que funciona cuando llamas al nodo como una cadena, por lo que esto podría ser potencialmente el problema.

    Una posible solución es intentar usar enfoques diferentes para importar tus datos desde el archivo CSV. Mencionaste que intentaste usar csv.reader y with open, pero no funcionaron. Puedes intentar convertir tus datos CSV en un DataFrame de pandas y luego convertirlo en un objeto de grafo de NetworkX utilizando la función from_pandas_edgelist. Esto puede ayudar a asegurar que tus datos estén en el formato y tipo correctos para NetworkX.

    En última instancia, es difícil proporcionar una solución específica sin ver los datos en sí y los mensajes de error exactos que recibiste. Sin embargo, te recomendaría probar enfoques diferentes para importar tus datos y crear tu objeto de gráfico, así como examinar cuidadosamente tus datos para asegurarte de que estén en el formato y tipo correctos para NetworkX. También puede ser útil consultar la documentación de NetworkX y Plotly para obtener más orientación sobre cómo crear gráficos de red 3D.

Comments are closed.