【问题标题】:Creating several graphs using 'for' loop使用“for”循环创建多个图形
【发布时间】:2021-10-20 17:52:20
【问题描述】:

我有一个看起来像这样的数据集

Node  Target Group
A       B      1
A       C      1
B       D      2
F       E      3
F       A      3
G       M      3

我想为 Group 中的每个不同值创建一个图表。共有5组。

file_num = 1
for item <=5: # this is wrong
    item.plot(title='Iteration n.'+item)
    plt.savefig(f'{file}_{file_num}.png')
    file_num += 1

    G = nx.from_pandas_edgelist(df, source='Node', target='Target')

    cytoscapeobj = ipycytoscape.CytoscapeWidget()
    cytoscapeobj.graph.add_graph_from_networkx(G)
    cytoscapeobj

但是,此代码不会生成单独的图形(G 和 Cytoscape 中的对象),这意味着某些东西在循环中不起作用(至少)。 任何帮助都会非常有用。

【问题讨论】:

  • 什么是item? item.plot 这行表明它是一个 DataFrame,但是 for 循环中的 item &lt;= 5 没有意义
  • 是的,它应该是一个虚拟值,在我的数据框中运行到最大组数

标签: python pandas for-loop networkx


【解决方案1】:

我们将 DataFrame 称为df。然后迭代 Group 列中的唯一值,按此 Group 值子集 df,并在循环的每次迭代中保存一个新图形。

file_num = 1
for group_val in df.Group.unique():
    df_group = item[item['group'] == group_val]
    df_group.plot(title='Iteration n.'+item)
    plt.savefig(f'{file}_{file_num}.png')
    file_num += 1

    G = nx.from_pandas_edgelist(df_group, source='Node', target='Target')

    cytoscapeobj = ipycytoscape.CytoscapeWidget()
    cytoscapeobj.graph.add_graph_from_networkx(G)
    cytoscapeobj

【讨论】:

  • 感谢您的回答,德里克。不幸的是,即使用我的 df 替换 item 后,我也看不到任何图表
  • 当你说你看不到任何图表时,你的意思是.png文件是空白的,还是cytoscapeobj行在单元格中没有显示任何东西(我假设你是使用 Jupyter 笔记本或类似的东西)
  • cytoscapeobj 不显示任何内容。但是,它可以正确打印 df_group。我也在想这样的事情(如果我没有 png 文件也没关系):G = [nx.from_pandas_edgelist(df_group, source='Node', target='Target', ) for _ in df.Group.unique()] fig, axes = plt.subplots(nrows=2, ncols=3) fig.subplots_adjust(hspace=0.4, wspace=0.4) ax = axes.flatten() for i in df.Group.unique():,但它不能正确显示 Cytoscape 对象
猜你喜欢
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
  • 2021-12-01
  • 2022-01-01
  • 1970-01-01
  • 2015-09-16
  • 2012-07-09
  • 1970-01-01
相关资源
最近更新 更多