基本上上面是中心每个边缘的标签:
当我为每个图添加边时,我试图添加一个标签,就像这样(对于图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中向标签的边缘添加标签所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)