【问题标题】:Networkx multiple attributes on nodes for multiple labels on graphNetworkx 节点上的多个属性,用于图上的多个标签
【发布时间】:2016-06-11 08:57:12
【问题描述】:

我正在开发一个推荐系统,该系统使用formal concept analysis 来查找网络中最近的相似客户端。为了创建正式的概念,我使用 pandas,用于网络 networkx 和绘制 matplotlib,即 Python 3 中的所有内容。

我的问题是我想在图表上表示具有每个节点的 2 类属性:例如客户端名称和电影名称。举一个简单的例子:节点1:“names”-> [“Bob”,“John”]; “电影”-> [“大白鲨”]。 “名称”和“电影”被编码为节点的属性。继续这个例子:

G=nx.Graph()
G.add_nodes_from([1,2])
G.add_edge(1,2)    
G.node[1]['names']=["Bob","John"]
G.node[1]['movies']=["Jaws"]

不幸的是,经过长时间搜索如何在图形的每个节点上放置 2 种类型的标签,我没有找到答案。这是我认为我应该使用的,但我不知道如何与 matplotlib 或 networkx 交互来进行双重标记:

node_labels = nx.get_node_attributes(G,"names")
node_labels2 = nx.get_node_attributes(G,"movies")
nx.draw_networkx_labels(G,labels = ?)

问题的另一个重要方面是将“电影”放在节点顶部,将“名称”放在节点下方,如下图所示。

An image of the type of graph I am looking for

非常感谢您的帮助!

【问题讨论】:

    标签: python matplotlib nodes networkx


    【解决方案1】:

    那么在您的网络中,节点代表什么,边代表什么?每个节点是否代表一个用户,每个边缘是否代表两个用户之间的相似品味?我认为你应该澄清一下,因为从你的问题看来你没有。

    【讨论】:

    • 老实说,我写它并不是为了只保留关于编程的主题,但这里的想法是:通过正式的概念分析,您可以创建连接用户和电影的正式概念。图(或树)的底部代表对象的起点(即此处的“名称”)。之后,图的顶部是属性的起点(即这里的“电影”)。就对象而言,图形是从下到上的。
    • 例如,我给出的图像是:Ashley 看过 Bob、Paul、Jordan 和 Gabby 看过的电影。但除了所有这些,她还看到了大白鲨。另一方面,在属性方面,图是从上到下的。同样的例子:保罗、乔丹、阿什利和约翰看到了兰博。该图是您可能想到的完整图的一种简化,每个节点代表多个用户和他们看过的电影。因此,节点既代表用户也代表电影,它们的边只是面向两个方向的链接。我希望我说得更清楚:)
    • 不,你没有:)。问题是您展示的图片更像是一棵树而不是图表。在图中,边不仅仅是一个链接。它代表了一些东西,你可以增加它的权重。以鲍勃、保罗和乔丹为例。 Bob 和 Paul 共享 5 部电影,Bob 和 Jordan 共享 2 部电影。这可能是具有 3 个节点和 2 条边 (B,P,weight=5) 和 (B,J,weight=2) 的图。不需要权重,但您可以使用它们向图表添加更多信息。您尝试使用的标签只是字符串,仅用于相互识别节点。大多数人为此使用整数。
    • 好吧,你是对的,我需要找到树木可视化工具。我查了一下,发现了一个类似于我想要的 python library,它使用了 graphviz 库。我会在那里更深入地研究。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多