在nodebox opengl中向图形的边缘添加标签

2024-03-21

我正在尝试向图表中的每个边添加标签,如下所示:

基本上上面的每个边缘都有标签在中心:

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

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

经过一番研究,我发现这样的标签是可能的Nodebox 1,仅适用于 Mac http://nodebox.net/code/index.php/Graph,似乎没有合适的替代方案节点盒-OpenGL http://www.cityinabottle.org/nodebox/physics/从文档中。我收到的错误:

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(), 
        stroke = color(0),
        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.1

g.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 = None
def 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 = dy

canvas.size = 500, 500
canvas.run(draw)

那么,问题仍然存在,如何在 Nodebox-OpenGL 中向图的边缘添加标签?


正如你在source http://pydoc.net/Python/nodebox-opengl/1.6/nodebox.graphics.physics/没有争议labelfor add_edge。 (搜索class Edge(object):)

我能看到的最好的方法就是创建你自己的MyEdge源自官方的类Edge添加文本的类(label) using

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

or

textpath(string, x=0, y=0, fontname=None, fontsize=None, fontweight=None)

在draw()方法中。

EDIT注意add_edge方法文档字符串:

def add_edge(self, id1, id2, *args, **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)
    """
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在nodebox opengl中向图形的边缘添加标签 的相关文章

  • 判断线程是否已经启动

    如何判断Python线程是否已经启动 有一个方法is alive 但这是真的before and while一个线程正在运行 你可以看看ident领域的Thread实例 这Python 2 7 线程文档 http docs python o
  • 在 python 的 Visual Studio 工具中按下 ctrl+F5 后,控制台窗口立即关闭

    我已经安装了 Visual Studio 的 Python 工具 但在控制台窗口中看不到输出 就像我在 Visual Studio 中运行 C 控制台应用程序时按以下快捷键时看到的输出一样 F5 开始调试程序并关闭 C 和 Python 中
  • 在 python 2 和 3 的spyder之间切换

    根据我在文档中了解到的内容 它指出您只需使用命令提示符创建一个新变量即可轻松在 2 个 python 环境之间切换 如果我已经安装了 python 2 7 则 conda create n python34 python 3 4 anaco
  • 如何用xlrd读取公式

    我正在尝试做一个解析器 它读取几个 Excel 文件 我通常需要位于行底部的值 您可以在其中找到所有上部元素的总和 因此 单元格值实际上是 sum 或 A5 0 5 可以说 对于使用 Excel 打开此文件的用户来说 它看起来像一个数字 这
  • 如何从网站中提取冠状病毒病例?

    我正在尝试从网站中提取冠状病毒 https www trackcorona live https www trackcorona live 但我得到了一个错误 这是我的代码 response requests get https www t
  • 为 PyCharm 中的所有配置设置相同的环境变量

    我有一个与 Celery 和很多不同的工作人员一起的项目 如何避免每次将 PyCharm 中的环境变量复制粘贴到每个运行 调试配置 有什么方法可以在项目设置中设置它们吗 找到解决方案here https stackoverflow com
  • 基于 True/False 值的 Python 优雅赋值

    我想根据三个布尔值中的值设置一个变量 最直接的方法是 if 语句后跟一系列 elif if a and b and c name first elif a and b and not c name second elif a and not
  • 使用 Python 解析 XML,解析外部 ENTITY 引用

    在我的 S1000D xml 中 它指定了一个带有对公共 URL 的引用的 DOCTYPE 该 URL 包含对包含所有有效字符实体的许多其他文件的引用 我使用 xml etree ElementTree 和 lxml 尝试解析它并得到解析错
  • 使用reduce方法的斐波那契数列

    于是 我看到有人用reduce方法来计算斐波那契数列 这是他的想法 1 0 1 1 2 1 3 2 5 3 对应于 1 1 2 3 5 8 13 21 代码如下所示 def fib reduce n initial 1 0 dummy ra
  • 以编程方式将列名称添加到 numpy ndarray

    我正在尝试将列名称添加到 numpy ndarray 然后按名称选择列 但这不起作用 我无法判断问题是在添加名称时出现 还是在稍后尝试调用它们时出现 这是我的代码 data np genfromtxt csv file delimiter
  • 如何将同步函数包装在异步协程中?

    我在用着aiohttp https github com aio libs aiohttp构建一个 API 服务器 将 TCP 请求发送到单独的服务器 发送 TCP 请求的模块是同步的 对于我来说是一个黑匣子 所以我的问题是这些请求阻塞了整
  • Matplotlib 将颜色图 tab20 更改为三种颜色

    Matplotlib 有一些新的且非常方便的颜色图 选项卡颜色图 https matplotlib org examples color colormaps reference html 我错过的是生成像 tab20b 或 tab20c 这
  • PermanentTaskFailure:“模块”对象没有属性“迁移”

    我在 google appengine 上使用 Nick Johnson 的批量更新库 http blog notdot net 2010 03 Announcing a robust datastore bulk update utili
  • Windows 与 Linux 文本文件读取

    问题是 我最近从 Windows 切换到 Ubuntu 我的一些用于分析数据文件的 python 脚本给了我错误 我不确定如何正确解决 我当前仪器的数据文件输出如下 Header 有关仪器等的各种信息 Data 状态 代码 温度 字段等 0
  • 在 python 查询参数中使用 %20 而不是 + 作为空格

    我使用 python requests 编写了以下 python 脚本 http requests readthedocs org en latest http requests readthedocs org en latest impo
  • Python列表对象属性“append”是只读的

    正如标题所说 在Python中 我试图做到这一点 以便当有人输入一个选择 在本例中为Choice13 时 它会从密码列表中删除旧密码并添加新密码 passwords mrjoebblock mrjoefblock mrjoegblock m
  • Melt() 函数复制数据集

    我有一个这样的表 id name doggo floofer puppo pupper 1 rowa NaN NaN NaN NaN 2 ray NaN NaN NaN NaN 3 emma NaN NaN NaN pupper 4 sop
  • bool() 和operator.truth() 有什么区别?

    bool https docs python org 3 library functions html bool and operator truth https docs python org 3 library operator htm
  • 将数组从 .npy 文件读入 Fortran 90

    我使用 Python 以二维数组 例如 X 的形式生成一些初始数据 然后使用 Fortran 对它们进行一些计算 最初 当数组大小约为 10 000 x 10 000 时 np savetxt 在速度方面表现良好 但是一旦我开始增加数组的维
  • 如何抑制 Pandas Future 警告?

    当我运行该程序时 Pandas 每次都会给出如下所示的 未来警告 D Python lib site packages pandas core frame py 3581 FutureWarning rename with inplace

随机推荐

  • 您可以从 Mobile Safari 访问 iPhone 相机吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有 JavaScript API 用于从 Mobile Safari 访问 iPhone 的相机
  • 无法使用 Javascript 更改

    在 Chromium 7 0 517 44 64615 Ubuntu 10 10 上 我似乎无法更改type的属性
  • CMake 抛出错误:无法加载缓存

    我正在尝试建立滴滴19 0 http dlib net release notes html例子 我做到了 cd examples mkdir build cd build cmake cmake build 现在获取exe cmake b
  • 如何使用 java 更改 Nimbus 外观和感觉的背景颜色

    在 Java Swing 应用程序中 我正在尝试 nimbus 的外观和感觉 它在 JdesktopPane 控件中看起来非常好 但我希望我的所有桌面窗格具有不同的颜色 但主题很好 有什么方法可以改变 Nimbus 外观和感觉的背景颜色吗
  • PHP中如何分割汉字?

    我需要一些关于如何在 PHP 中拆分与英文单词和数字混合的汉字的帮助 例如 如果我读到 FrontPage 2000中文版應用大全 我希望得到 FrontPage 2000 中 文 版 應 用 大 全 or FrontPage 2 0 0
  • Android Studio 中 gitIgnore 文件放在哪里?

    我正在开发一个应用程序 我必须将该项目带到 GitHub 现在 我必须制作 gitIgnore 文件 我知道该文件用于忽略我的项目中的某些指定文件 我使用了 gitIgnore io 服务并收到了生成的文件 这是我的 gitIgnore 文
  • 宅基地安装

    我不知道我在哪里犯了错误 我的命令vagrant up回复以下几行 vagrant up Check your Homestead yaml file the path to your private key does not exist
  • Rails 和 Mutli Nesting 中的祖先宝石

    我正在使用 Rails 中的祖先 gem 来嵌套一些注释 我想要的是让您能够获取所有注释 然后将它们全部嵌套 当我输入时 我如何得到以下信息 comments post comments arrange serializable进入我的评论
  • 仅在Gitlab CI中测试失败,本地成功

    我刚刚开始使用 Gitlab CI 使用 docker 执行器 在面对并解决了一些初学者的问题之后 我现在面临着一个非常奇怪的问题 我所有的单元测试都在本地成功 但是当我使用 CI 运行它们时 其中一些测试失败了 一个例子 2018 12
  • 如何等待鼠标点击

    class GameFrameClass extends javax swing JFrame public void MyFunc UserButton setText Str UserButton addActionListener n
  • 无法访问通过 Visual Studio 创建的数据库?

    我已经创建了一个数据库电子邮件数据库 它存储在 C Program Files Microsoft SQL Server MSSQL10 MSSQLSERVER MSSQL DATA 在 Visual Studio 中 我使用Server
  • 实现多个接口是否违反单一职责原则?

    From 维基百科 http en wikipedia org wiki Single responsibility principle 单一责任原则规定每个类都应该有一个 单一责任 并且该责任应该完全由 由类封装 这是否意味着实现多个接口
  • Mongoid has_and_belongs_to_many 关联

    我试图让 mongoid 来保存关联 但我只能让一侧工作 如果我有以下测试 test should add a user as a follower when a user follows the group do cali group f
  • 没有“isPresent()”检查的“Optional.get()”

    我有以下 Java 搜索代码 return getTableViewController getMe getColumns stream filter gt Database equalsColumnName getId columnId
  • ActionController::Live 是否可以检查连接是否仍然有效?

    我正在尝试使用 Rails 4 的实时流媒体来实现文本 事件流 它工作得很好 我遇到的唯一麻烦是我无法在不发送任何消息的情况下检查连接是否有效 我想到的唯一解决方案是使用循环刻度生成器创建支持通道 以便某些后台任务会定期向那里发送消息 但看
  • 调用构造函数重新初始化对象

    是否可以使用类的构造函数重新初始化类的对象 有点 给定 A 类 A a a A 最后一条语句不是初始化 而是赋值 但它可能会执行您想要的操作
  • 如何在jboss中生成resteasy的wadl文件

    我想为我的项目生成一个 wadl 文件 该文件使用resteasy Jboss 6 4 Maven 有很多关于球衣的例子 但不是关于resteasy的 有人用它来resteasy吗 Resteasy 从 3 0 14 Final 开始支持
  • 对 Cassandra 术语感到困惑(行与分区)

    我希望有人能够消除我对 Cassandra 中的行和分区之间的区别的困惑 我认为一行将是一组列 就像在 SQL 数据库中 如架构中指定的那样 按分区键跨节点分布 并按每个分区内的集群键排序 但后来我遇到了这个教程 https academy
  • 我应该如何处理非常非常长的 URL?

    我想知道这是否是一个错误 但现在我对所有搜索 URL 都使用 GET 原因是 通过 GET Url 用户可以简单地复制地址栏上的链接并轻松共享或保存 例如 Google 似乎也使用 GET Url 表单 由于它是一个带有过滤器 排序器等的搜
  • 在nodebox opengl中向图形的边缘添加标签

    我正在尝试向图表中的每个边添加标签 如下所示 基本上上面的每个边缘都有标签在中心 当我向每个图表添加边时 我尝试添加标签 就像这样 对于图表g g add edge label edge distance 经过一番研究 我发现这样的标签是可