Проблемы с печатью на mplleaflet с использованием networkx и Python - PullRequest
0 голосов
/ 09 марта 2020

Я работаю над проблемой анализа социальных сетей, где у меня есть ориентированный граф. Ранее у меня была проблема, когда я импортировал ребра в мой файл графика, но это было решено. Тем не менее, я столкнулся с другой проблемой при попытке построить график на карте, который ранее работал, когда он был ненаправленным. Я получаю эту ошибку «ValueError: Нераспознанный код: S», и вот весь мой сценарий:

import mplleaflet
import matplotlib.pyplot as plt
import networkx as nx
import numpy as np
import pandas as pd

импорт ребра и узла pandas фрейм данных

edges = pd.read_csv("./edges.csv", sep = ";")
nodes = pd.read_csv("./nodes_coordinates.csv", sep = ";")

установка направленного graph

G = nx.DiGraph()
G = nx.from_pandas_edgelist(edges, source = "from",
                                   target = "to",
                                   create_using = nx.DiGraph)
data = nodes.set_index("node").to_dict("index").items()
G.add_nodes_from(data)
nx.is_directed(G)

output: true

Ранее он был ненаправленным, и все на карте было возможно построить. Теперь, когда я сделал это, он больше не работает, чтобы нанести на карту, и я не знаю почему.

установка координат

coordinates_dict = {}
for node in nodes.node:
    coordinates_dict[node] = list(nodes.loc[nodes.node == node ,['lon','lat']].values[0])

построение карты

fig, ax = plt.subplots(figsize =(20,13))
nx.draw(G, pos = coordinates_dict)
mplleaflet.display(fig = fig)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-43-33a2a6f2d48a> in <module>
      1 fig, ax = plt.subplots(figsize =(20,13))
      2 nx.draw(G, pos=coordinates_dict)
----> 3 mplleaflet.display(fig=fig)

~/anaconda3/lib/python3.7/site-packages/mplleaflet/_display.py in display(fig, closefig, **kwargs)
    151         plt.close(fig)
    152 
--> 153     html = fig_to_html(fig, **kwargs)
    154 
    155     # We embed everything in an iframe.

~/anaconda3/lib/python3.7/site-packages/mplleaflet/_display.py in fig_to_html(fig, template, tiles, crs, epsg, embed_links)
     82     renderer = LeafletRenderer(crs=crs, epsg=epsg)
     83     exporter = Exporter(renderer)
---> 84     exporter.run(fig)
     85 
     86     attribution = _attribution + ' | ' + tiles[1]

~/anaconda3/lib/python3.7/site-packages/mplleaflet/mplexporter/exporter.py in run(self, fig)
     49             import matplotlib.pyplot as plt
     50             plt.close(fig)
---> 51         self.crawl_fig(fig)
     52 
     53     @staticmethod

~/anaconda3/lib/python3.7/site-packages/mplleaflet/mplexporter/exporter.py in crawl_fig(self, fig)
    116                                        props=utils.get_figure_properties(fig)):
    117             for ax in fig.axes:
--> 118                 self.crawl_ax(ax)
    119 
    120     def crawl_ax(self, ax):

~/anaconda3/lib/python3.7/site-packages/mplleaflet/mplexporter/exporter.py in crawl_ax(self, ax)
    136                     self.draw_text(ax, artist)
    137             for patch in ax.patches:
--> 138                 self.draw_patch(ax, patch)
    139             for collection in ax.collections:
    140                 self.draw_collection(ax, collection)

~/anaconda3/lib/python3.7/site-packages/mplleaflet/mplexporter/exporter.py in draw_patch(self, ax, patch, force_trans)
    225                                 pathcodes=pathcodes,
    226                                 style=linestyle,
--> 227                                 mplobj=patch)
    228 
    229     def draw_collection(self, ax, collection,

~/anaconda3/lib/python3.7/site-packages/mplleaflet/leaflet_renderer.py in draw_path(self, data, coordinates, pathcodes, style, offset, offset_coordinates, mplobj)
    123             else:
    124                 data = [c.tolist() for c in data]
--> 125             rings = list(iter_rings(data, pathcodes))
    126 
    127             if style['facecolor'] != 'none':

~/anaconda3/lib/python3.7/site-packages/mplleaflet/utils.py in iter_rings(data, pathcodes)
     12             ring.append(point)
     13         else:
---> 14             raise ValueError('Unrecognized code: {}'.format(code))
     15 
     16     if len(ring):

ValueError: Unrecognized code: S

Большое вам спасибо!

файл csv edge edge csv file

файл узла

node file

...