python – 在nodebox opnegl中向标签的边缘添加标签

python – 在nodebox opnegl中向标签的边缘添加标签,第1张

概述我想在我的图表中为每条边添加一个标签,如下所示: 基本上上面是中心每个边缘的标签: 当我为每个图添加边时,我试图添加一个标签,就像这样(对于图g): g.add_edge(... label=edge.distance ...) 经过一些研究,我发现这种标签在Nodebox 1, which only works for Mac下是可能的,文件中似乎没有合适的Nodebox-OpenGL替代品.我 我想在我的图表中为每条边添加一个标签,如下所示:

基本上上面是中心每个边缘的标签:

当我为每个图添加边时,我试图添加一个标签,就像这样(对于图g):

g.add_edge(... label=edge.distance ...)

经过一些研究,我发现这种标签在Nodebox 1,which only works for Mac下是可能的,文件中似乎没有合适的Nodebox-OpenGL替代品.我收到的错误:

Traceback (most recent call last):  file "C:\foo\bar\baz\Imager.py",line 29,in <module>    g.add_edge(edge.fr,edge.to,length=edge.distance,weight=2,stroke=color(1.0,0.2,0.0),label="cheese")  file "C:\Python27\lib\site-packages\nodeBox\graphics\physics.py",line 1254,in add_edge    e2 = e2(n1,n2,*args,**kwargs)TypeError: __init__() got an unexpected keyword argument 'label'

您可以重现该问题:

from nodeBox.graphics import *from nodeBox.graphics.physics import Node,Edge,Graph# Create a graph with randomly connected nodes.# Nodes and edges can be styled with fill,stroke,strokewIDth parameters.# Each node displays its ID as a text label,stored as a Text object in Node.text.# To hIDe the node label,set the text parameter to None.g = Graph()# Random nodes.for i in range(50):    g.add_node(ID=str(i+1),radius = 5,stroke = color(0),text = color(0))# Random edges.for i in range(75):    node1 = choice(g.nodes)    node2 = choice(g.nodes)    g.add_edge(node1,node2,length = 1.0,weight = random(),label = "Placeholder")    #!!!!!!!!!!!!! ADDING THE label HERE# Two handy tricks to prettify the layout:# 1) Nodes with a higher weight (i.e. incoming traffic) appear bigger.for node in g.nodes:    node.radius = node.radius + node.radius*node.weight# 2) Nodes with only one connection ("leaf" nodes) have a shorter connection.for node in g.nodes:    if len(node.edges) == 1:        node.edges[0].length *= 0.1g.prune(depth=0)          # Remove orphaned nodes with no connections.g.distance         = 10   # Overall spacing between nodes.g.layout.force     = 0.01 # Strength of the attractive & repulsive force.g.layout.repulsion = 15   # Repulsion radius.dragged = Nonedef draw(canvas):    canvas.clear()    background(1)    translate(250,250)    # With directed=True,edges have an arrowhead indicating the direction of the connection.    # With weighted=True,Node.centrality is indicated by a shadow under high-traffic nodes.    # With weighted=0.0-1.0,indicates nodes whose centrality > the given threshold.    # This requires some extra calculations.    g.draw(weighted=0.5,directed=True)    g.update(iterations=10)    # Make it interactive!    # When the mouse is pressed,remember on which node.    # Drag this node around when the mouse is moved.    dx = canvas.mouse.x - 250 # Undo translate().    dy = canvas.mouse.y - 250    global dragged    if canvas.mouse.pressed and not dragged:        dragged = g.node_at(dx,dy)    if not canvas.mouse.pressed:        dragged = None    if dragged:        dragged.x = dx        dragged.y = dycanvas.size = 500,500canvas.run(draw)

那么,问题仍然存在,如何在NodeBox-OpenGL中为图形边缘添加标签?

解决方法 正如您在 source中看到的那样,add_edge没有参数label. (搜索类Edge(对象):)

我能看到的最好的方法是创建自己的MyEdge类,该类源自官方Edge类,它使用文本(标签)添加

txt = Text(str,x=0,y=0,wIDth=None,height=None)

要么

textpath(string,Fontname=None,Fontsize=None,Fontweight=None)

在draw()方法中.

编辑
注意add_edge方法docstring:

def add_edge(self,ID1,ID2,**kwargs):    """ Appends a new Edge to the graph.        An optional base parameter can be used to pass a subclass of Edge:        Graph.add_edge("cold","winter",base=IsPropertyOf)    """
总结

以上是内存溢出为你收集整理的python – 在nodebox opnegl中向标签的边缘添加标签全部内容,希望文章能够帮你解决python – 在nodebox opnegl中向标签的边缘添加标签所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1196931.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存