我以.json文件的形式将我的Facebook数据导入到我的计算机上.数据格式如下:
{"nodes":[{"name":"Alan"},{"name":"Bob"}],"links":[{"source":0,"target:1"}]}
Run Code Online (Sandbox Code Playgroud)
然后,我使用这个功能:
def parse_graph(filename):
"""
Returns networkx graph object of facebook
social network in json format
"""
G = nx.Graph()
json_data=open(filename)
data = json.load(json_data)
# The nodes represent the names of the respective people
# See networkx documentation for information on add_* functions
G.add_nodes_from([n['name'] for n in data['nodes']])
G.add_edges_from([(data['nodes'][e['source']]['name'],data['nodes'][e['target']]['name']) for e in data['links']])
json_data.close()
return G
Run Code Online (Sandbox Code Playgroud)
使这个.json文件在NetworkX上使用图形.如果我找到节点的程度,我知道如何使用的唯一方法是:
degree = nx.degree(p)
Run Code Online (Sandbox Code Playgroud)
其中p是我所有朋友的图表.现在,我想绘制图形,使得节点的大小与该节点的程度相同.我该怎么做呢?
使用:
nx.draw(G,node_size=degree)
Run Code Online (Sandbox Code Playgroud)
没有工作,我想不出另一种方法.
当我将multigraph numpy邻接矩阵传递给networkx(使用from_numpy_matrix函数),然后尝试使用matplotlib绘制图形时,它会忽略多个边缘.
我怎么能让它画出多个边缘呢?
我有一个图G,节点和边的属性'state'.我想绘制图形,标记所有节点,并在相应的边/节点外标记状态.
for v in G.nodes():
G.node[v]['state']='X'
G.node[1]['state']='Y'
G.node[2]['state']='Y'
for n in G.edges_iter():
G.edge[n[0]][n[1]]['state']='X'
G.edge[2][3]['state']='Y'
Run Code Online (Sandbox Code Playgroud)
命令draw.networkx有一个标签选项,但我不明白如何将该属性作为标签提供给此命令.有人可以帮帮我吗?
我有一个加权图:
F=nx.path_graph(10)
G=nx.Graph()
for (u, v) in F.edges():
G.add_edge(u,v,weight=1)
Run Code Online (Sandbox Code Playgroud)
获取节点列表:
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)]
Run Code Online (Sandbox Code Playgroud)
我想通过这条规则改变每条边的重量:
删除一个节点,如节点5,清除,edge(4,5)和(5,6)将被删除,每个边的权重将变为:
{#这些边缘位于删除的边缘(4,5)和(5,6)附近
(3,4): '重量'= 1.1,
(6,7): '重量'= 1.1,
#these边缘位于上述边缘附近
(2,3): '重量'= 1.2,
(7,8): '重量'= 1.2,
#these边缘位于上述边缘附近
(1,2): '重量'= 1.3,
(8,9): '重量'= 1.3,
#这边是附近的(1,2)
(0,1): '重量'= 1.4}
怎么写这个算法?
PS:path_graph只是一个例子.我需要一个适合任何图表类型的程序.此外,程序需要是可迭代的,这意味着我每次都可以从原始图中删除一个节点.
问候
我使用networkx进行可视化.我看到当我使用draw_networkx_edge_labels函数时,我可以检索边缘的标签.
我想在节点上打印属性(而不是标签)..几乎尝试一切.仍然卡住了.如果我每个节点有5个属性,那么我是否可以在每个节点上打印特定属性?例如,如果汽车节点具有属性:大小,价格,公司,..我想在每个节点上打印汽车的大小?
不知道是否可以在图表上输出.
我有一个JSON提要数据,其中包含许多用户关系,例如:
"subject_id = 1, object_id = 2, object = added
subject_id = 1, object_id = 2, object = liked
subject_id = 1, object_id = 3, object = added
subject_id = 2, object_id = 1, object = added"
Run Code Online (Sandbox Code Playgroud)
现在我使用以下代码将JSON转换为networkx Graph:
def load(fname):
G = nx.DiGraph()
d = simplejson.load(open(fname))
for item in d:
for attribute, value in item.iteritems():
G.add_edge(value['subject_id'],value['object_id'])
return G
Run Code Online (Sandbox Code Playgroud)
结果如下:
[('12820', '80842'), ('12820', '81312'), ('12820', '81311'), ('13317', '29'), ('12144', '81169'), ('13140', '16687'), ('13140', '79092'), ('13140', '78384'), ('13140', '48715'), ('13140', '54151'), …Run Code Online (Sandbox Code Playgroud) 我试图从一个大图中提取包含特定节点的所有连接节点的子图.
Networkx库中是否有解决方案?
[编辑]
我的图是DiGraph
[编辑]
简单地改写:
我想包含我的特定节点n_i个和与所有连接直接或间接地使用任何传入或outcoming边缘(由其它节点传递)的节点我的曲线图的一部分.
例:
>>> g = nx.DiGraph()
>>> g.add_path(['A','B','C',])
>>> g.add_path(['X','Y','Z',])
>>> g.edges()
[('A', 'B'), ('B', 'C'), ('Y', 'Z'), ('X', 'Y')]
Run Code Online (Sandbox Code Playgroud)
我想要的结果是:
>>> g2 = getSubGraph(g, 'B')
>>> g2.nodes()
['A', 'B', 'C']
>>> g2.edges()
[('A', 'B'), ('B', 'C')]
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个线性网络图Python(使用(尽管有matplotlib,networkx但有兴趣bokeh),在概念上类似于下面的一个.
如何pos在Python中使用networkx?有效地构建这个图形图? 我想将它用于更复杂的示例,所以我觉得对这个简单示例的位置进行硬编码是没有用的:(.networkx有解决方案吗?
pos(字典,可选) - 以节点为键,位置为值的字典.如果未指定,则将计算弹簧布局定位.有关计算节点位置的函数,请参阅networkx.layout.
我还没有看到任何有关如何实现这一目标的教程,networkx这就是为什么我认为这个问题将成为社区的可靠资源.我已经广泛地完成了这些networkx教程,没有像这样的东西.如果networkx不仔细使用这个pos论点,那么这种网络的布局就无法解释......我相信这是我唯一的选择. https://networkx.github.io/documentation/networkx-1.9/reference/drawing.html文档中的预计算布局似乎都没有很好地处理这种类型的网络结构.
简单示例:
(A)每个外键是图中从左到右移动的迭代(例如,迭代0表示样本,迭代1具有组1-3,与迭代2相同,迭代3具有组1-2等).(B)内的字典包含在该特定迭代当前的分组,和表示当前组的前组的合并的权重(例如,iteration 3已Group 1与Group 2和iteration 4所有的iteration 3's Group 2已进入iteration 4's Group 2但iteration 3's Group 1已被划分.权重总是总和为1.
我的代码为上图的连接w /权重:
D_iter_current_previous = {
1: {
"Group 1":{"sample_0":0.5, "sample_1":0.5, "sample_2":0, "sample_3":0, "sample_4":0},
"Group 2":{"sample_0":0, "sample_1":0, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用带有Jupyter笔记本的python 3.6和带有anaconda的网络包绘制图表networkx.但是图表并没有按照文档绘制,我只是得到了一条弃用的消息.
码:
import networkx as nx
import csv
import matplotlib as plt
G = nx.read_pajek('Hi-tech.net')
nx.draw(G)
Run Code Online (Sandbox Code Playgroud)
信息:
MatplotlibDeprecationWarning:pyplot.hold已弃用.未来的行为将与长期默认值一致:plot命令在不先清除Axes和/或Figure的情况下添加元素.
b = plt.ishold()
Run Code Online (Sandbox Code Playgroud)
未来的行为将与长期默认值一致:plot命令在不先清除Axes和/或Figure的情况下添加元素.
plt.hold(b)
Run Code Online (Sandbox Code Playgroud)
warnings.warn("不推荐使用axes.hold,将在3.0中删除")
networkx ×10
python ×7
python-2.7 ×2
algorithm ×1
attributes ×1
draw ×1
duplicates ×1
edge-list ×1
edges ×1
graph ×1
graphviz ×1
matplotlib ×1
plot ×1
python-3.x ×1