Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 检索部分键';部件中的键对键…';-Networkx_Python_Networkx_Matplotlib Basemap - Fatal编程技术网

Python 检索部分键';部件中的键对键…';-Networkx

Python 检索部分键';部件中的键对键…';-Networkx,python,networkx,matplotlib-basemap,Python,Networkx,Matplotlib Basemap,我正在尝试此教程:。在原作者的善意帮助下,我的大部分作品都成功了。它最初是在Python2.7中创建的,我现在使用的是3.5。更改包括graphml格式的数据(不是pickle)、插入缺少的参数以及指定G=nx.Graph() 我现在陷入了错误的困境: NameError: name 'part' is not defined. 我有点不确定这是否是2.7-3.5冲突,是否有函数缺失 代码如下: import matplotlib.pyplot as plt import networkx a

我正在尝试此教程:。在原作者的善意帮助下,我的大部分作品都成功了。它最初是在Python2.7中创建的,我现在使用的是3.5。更改包括graphml格式的数据(不是pickle)、插入缺少的参数以及指定G=nx.Graph()

我现在陷入了错误的困境:

NameError: name 'part' is not defined.
我有点不确定这是否是2.7-3.5冲突,是否有函数缺失

代码如下:

import matplotlib.pyplot as plt
import networkx as nx
from mpl_toolkits.basemap import Basemap
import difflib

m = Basemap(projection='robin',lon_0=0,resolution='l')

m.drawcountries(linewidth = 0.5)
m.fillcontinents(color='white',lake_color='white')
m.drawcoastlines(linewidth=0.5)

# load geographic coordinate system for countries
import csv
country = [row[0].strip() for row in csv.reader(open('LonLat.csv'), delimiter=';')]    # clear spaces
lat = [float(row[1]) for row in csv.reader(open('LonLat.csv'), delimiter=';')]
lon = [float(row[2]) for row in csv.reader(open('LonLat.csv'), delimiter=';')]

G=nx.Graph()

# define position in basemap
    position = {}
    for i in range(0, len(country)):
        position[country[i]] = m(lon[i], lat[i])

    def similar(landstring, country):
        l = difflib.get_close_matches(landstring, country, 1)
        return l[0]

    pos = dict((land, position[similar(land, country)]) for land in G.nodes())

    nx.draw_networkx_nodes(G, pos, nodelist = [**key for key in part if part[key] == 0**],
         node_size = [deg_weight[s]*10 for s in part if part[s] == 0],
         node_color = 'red', node_shape='^', alpha=0.8)
         nx.draw_networkx_nodes(G, pos, nodelist = [key for key in part if part[key] == 1],
         node_size = [deg_weight[s]*20 for s in part if part[s] == 1],
         node_color = 'black', node_shape='d')
         nx.draw_networkx_nodes(G, pos, nodelist = [key for key in part if part[key] == 2],
         node_size = [deg_weight[s]*10 for s in part if part[s] == 2],
         node_color = 'green', node_shape='o')
         nx.draw_networkx_nodes(G, pos, nodelist = [key for key in part if part[key] == 3],
         node_size = [deg_weight[s]*10 for s in part if part[s] == 3],
         node_color = 'blue', alpha=0.8)
         nx.draw_networkx_edges(G, pos, color='grey', width = 0.75, alpha=0.2)
         plt.show()
感觉这个答案(),这个答案(),和这个答案()都指向了正确的方向,但是我不能充分利用链接


任何意见都将不胜感激。我很想让它完全工作。

以下代码几乎完全工作。一些小问题仍然存在,例如,地图显示在边缘和节点的“上方”,未定义“度权重”,但它基本上可以工作。如果我有时间完全修好,我会发帖的。在这里为任何感兴趣的人发布。感谢拉斐尔·海伯格博士的慷慨援助

#import sys
#sys.version
#'3.5.1 |Anaconda 4.0.0 (64-bit)...

# import modules
import matplotlib.pyplot as plt
import networkx as nx
from mpl_toolkits.basemap import Basemap
import csv
import difflib
import community # https://bitbucket.org/taynaud/python-louvain

# define map
m = Basemap(projection='robin',lon_0=0,resolution='l')
m.drawcountries(linewidth = 0.5)
m.fillcontinents(color='white',lake_color='white')
m.drawcoastlines(linewidth=0.5)

# load geographic coordinates for countries
country = [row[0].strip() for row in csv.reader(open('LonLat.csv'), delimiter=';')]    # clear spaces
lat = [float(row[1]) for row in csv.reader(open('LonLat.csv'), delimiter=';')]
lon = [float(row[2]) for row in csv.reader(open('LonLat.csv'), delimiter=';')]

# load data
G = nx.read_graphml('data.graphml')

# define position in basemap
position = {} 
for i in range(0, len(country)): 
    position[country[i]] = m(lon[i], lat[i])

def similar(landstring, country):
    l = difflib.get_close_matches(landstring, country, 1)
    return l[0]

pos = dict((land, position[similar(land, country)]) for land in G.nodes())

part = community.best_partition(G)

# draw graph
nx.draw_networkx_nodes(G, pos, nodelist = [key for key in part if part[key] == 0], 
                       node_size = [deg_weight[s]*10 for s in part if part[s] == 0], 
                       node_color = 'red', node_shape='^', alpha=0.8)
nx.draw_networkx_nodes(G, pos, nodelist = [key for key in part if part[key] == 1], 
                       node_size = [deg_weight[s]*20 for s in part if part[s] == 1],
                       node_color = 'black', node_shape='d')
nx.draw_networkx_nodes(G, pos, nodelist = [key for key in part if part[key] == 2],
                       node_size = [deg_weight[s]*10 for s in part if part[s] == 2],
                       node_color = 'green', node_shape='o')
nx.draw_networkx_nodes(G, pos, nodelist = [key for key in part if part[key] == 3],
                       node_size = [deg_weight[s]*10 for s in part if part[s] == 3],
                       node_color = 'blue', alpha=0.8)
nx.draw_networkx_edges(G, pos, color='grey', width = 0.75, alpha=0.2)

#print/generate plot
plt.show()

下面的代码几乎完全有效。一些小问题仍然存在,例如,地图显示在边缘和节点的“上方”,未定义“度权重”,但它基本上可以工作。如果我有时间完全修好,我会发帖的。在这里为任何感兴趣的人发布。感谢拉斐尔·海伯格博士的慷慨援助

#import sys
#sys.version
#'3.5.1 |Anaconda 4.0.0 (64-bit)...

# import modules
import matplotlib.pyplot as plt
import networkx as nx
from mpl_toolkits.basemap import Basemap
import csv
import difflib
import community # https://bitbucket.org/taynaud/python-louvain

# define map
m = Basemap(projection='robin',lon_0=0,resolution='l')
m.drawcountries(linewidth = 0.5)
m.fillcontinents(color='white',lake_color='white')
m.drawcoastlines(linewidth=0.5)

# load geographic coordinates for countries
country = [row[0].strip() for row in csv.reader(open('LonLat.csv'), delimiter=';')]    # clear spaces
lat = [float(row[1]) for row in csv.reader(open('LonLat.csv'), delimiter=';')]
lon = [float(row[2]) for row in csv.reader(open('LonLat.csv'), delimiter=';')]

# load data
G = nx.read_graphml('data.graphml')

# define position in basemap
position = {} 
for i in range(0, len(country)): 
    position[country[i]] = m(lon[i], lat[i])

def similar(landstring, country):
    l = difflib.get_close_matches(landstring, country, 1)
    return l[0]

pos = dict((land, position[similar(land, country)]) for land in G.nodes())

part = community.best_partition(G)

# draw graph
nx.draw_networkx_nodes(G, pos, nodelist = [key for key in part if part[key] == 0], 
                       node_size = [deg_weight[s]*10 for s in part if part[s] == 0], 
                       node_color = 'red', node_shape='^', alpha=0.8)
nx.draw_networkx_nodes(G, pos, nodelist = [key for key in part if part[key] == 1], 
                       node_size = [deg_weight[s]*20 for s in part if part[s] == 1],
                       node_color = 'black', node_shape='d')
nx.draw_networkx_nodes(G, pos, nodelist = [key for key in part if part[key] == 2],
                       node_size = [deg_weight[s]*10 for s in part if part[s] == 2],
                       node_color = 'green', node_shape='o')
nx.draw_networkx_nodes(G, pos, nodelist = [key for key in part if part[key] == 3],
                       node_size = [deg_weight[s]*10 for s in part if part[s] == 3],
                       node_color = 'blue', alpha=0.8)
nx.draw_networkx_edges(G, pos, color='grey', width = 0.75, alpha=0.2)

#print/generate plot
plt.show()

这是打字错误吗?
part
应该改为
pos
?您收到名称错误,因为此代码中没有分配
零件
。很可能是。我之前用pos替换了所有的part,但是没有用。既然你提出了,我会再试一次。至少,这不会给你一个
名称错误
,但它可能会因为其他原因失败。我简要地看了一下您提供的示例,我看到类似的断开,在这些列表理解之前,没有提到
部分。这是完整的回溯错误:
namererror traceback(最近一次调用)in()33 pos=dict((land,position[相似的(land,country)])中的land in G.nodes()34--->35 nx.draw_networkx_节点(G,pos,nodelist=[key for key in part if part[key]=0],36节点大小=[deg_weight[s]*10 for s in part if part[s]=0],37 node_color='red',node_shape='^',alpha=0.8)name错误:没有定义名称“part”
我把其余的代码放进去了,因为它不是很长。这是打字错误吗,应该是
part
而不是
pos
?您收到名称错误,因为此代码中没有分配
零件
。很可能是。我之前用pos替换了所有的part,但是没有用。既然你提出了,我会再试一次。至少,这不会给你一个
名称错误
,但它可能会因为其他原因失败。我简要地看了一下您提供的示例,我看到类似的断开,在这些列表理解之前,没有提到
部分。这是完整的回溯错误:
namererror traceback(最近一次调用)in()33 pos=dict((land,position[相似的(land,country)])中的land in G.nodes()34--->35 nx.draw_networkx_节点(G,pos,nodelist=[key for key in part if part[key]=0],36节点大小=[deg_weight[s]*10 for s in part if part[s]=0],37 node_color='red',node_shape='^',alpha=0.8)name错误:未定义名称“part”
我将其余代码放入,因为它不是很长。