使用gnuplot绘制进程树

2023-12-24

类似于这个问题here https://stackoverflow.com/questions/20406346/how-to-plot-tree-graph-web-data-on-gnuplot我想绘制给定 PID 的进程树,我应该能够将该进程及其子进程绘制为树。但是,我想保留节点/边之间的父子关系。我的意思是,任何两个孩子之间都不应该有边缘。坐标实际上并不重要。另外,我对其他绘图工具选项持开放态度。我尝试了上述问题的接受答案,但它链接了所有节点。

任何形式的建议/帮助都会让我很开心。

注:我使用的是Ubuntu


你不会提供太多你拥有的和你真正想要的细节。所以我假设一些事情。当然,还有改进的空间。要了解有关绘图样式的更多信息,请在 gnuplot 控制台中检查help points, help vectors, help labels.

Code:

### drawing a simple tree
reset session

$Children <<EOD
23
34
45
56
67
78
EOD

$Parent <<EOD
123
EOD

unset border
unset tics
Size = 8
set offsets 0.2,0.2,0.2,0.2

plot $Children u (Last=$0):(1):1 w labels not, \
     '' u 0:(1):(Last/2-$0):(1) w vectors nohead lc rgb "black" notitle, \
     '' u 0:(1):(Size) w p pt 7 ps var lc rgb "yellow" not, \
     '' u 0:(1):1 w labels not, \
     $Parent u (Last/2):(2):(Size) w p pt 7 ps var lc rgb "light-grey" not, \
     '' u (Last/2):(2):1 w labels center not
### end of code

Result:

添加:

实际上,您可以使用 gnuplot 绘制更复杂的树形图。幸运的是,gnuplot 允许递归函数。

输入由 3 列组成,没有标题。 每个 ID 只有一个父节点,除了顶级节点之外。一个ID可以有多个孩子。

先决条件:

  • 第 1 列包含唯一的整数 ID 号
  • 第 2 列包含第 1 列中子 ID 的父 ID,或者NaN为顶部节点。
  • 第3列节点标签名称

欢迎改进。

Code:(实际上是一些“废话”树)

### tree diagram with gnuplot
reset session

#ID  Parent   Name
$Data <<EOD
   1    NaN   Ant
   2      1   Ape
   3      1   Ass
   4      2   Bat
   5      2   Bee
   6      2   Cat
   7      3   Cod
   8      3   Cow
   9      3   Dog
  10      7   Eel
  11      7   Elk
  12      7   Emu
  13      9   Fly
  14      9   Fox
  15      4   Gnu
  16      1   Hen
  17     16   Hog
  18     12   Jay
  19     12   Owl
  20     15   Pig
  21     15   Pug
  22     12   Ram
  23     14   Rat
  24     12   Sow
  25      7   Yak
EOD

# put datablock into strings
IDs = Parents = Names = ''
set table $Dummy
    plot $Data u (IDs = IDs.strcol(1).' '): \
                 (Parents = Parents.strcol(2).' '): \
                 (Names = Names.strcol(3).' ') w table
unset table

# Top node has no parent ID 'NaN'
Start(n) = int(sum [i=1:words(Parents)] (word(Parents,i) eq 'NaN' ? int(word(IDs,i)) : 0))

# get list index by ID
ItemIdx(s,n) = n == n ? (tmp=NaN, sum [i=1:words(s)] ((word(s,i)) == n ? (tmp=i,0) : 0), tmp) : NaN

# get parent of ID n
Parent(n) = word(Parents,ItemIdx(IDs,n))

# get level of ID n, recursive function
Level(n) = n == n ? Parent(n)>0 ? Level(Parent(n))-1 : 0 : NaN

# get number of children of ID n
ChildCount(n) = int(sum [i=1:words(Parents)] (word(Parents,i)==n))

# Create child list of ID n
ChildList(n) = (Ch = ' ', sum [i=1:words(IDs)] (word(Parents,i)==n ? (Ch = Ch.word(IDs,i).' ',1) : (Ch,0) ), Ch )

# m-th child of ID n
Child(n,m) = word(ChildList(n),m)

# List of leaves, recursive function
LeafList(n) = (LL='', ChildCount(n)==0 ? LL=LL.n.' ' : sum [i=1:ChildCount(n)] (LL=LL.LeafList(Child(n,i)), 0),LL)

# create list of all leaves
LeafAll = LeafList(Start(0))

# get x-position of ID n, recursive function
XPos(n) = ChildCount(n) == 0 ? ItemIdx(LeafAll,n) : (sum [i=1:ChildCount(n)] (XPos(Child(n,i))))/(ChildCount(n))

# create the tree datablock for plotting
set print $Tree
    do for [j=1:words(IDs)] {
        n = int(word(IDs,j))
        print sprintf("% 3d % 7.2f % 4d % 5s", n, XPos(n), Level(n), word(Names,j))
    }
set print
print $Tree

# get x and y distance from ID n to its parent
dx(n) = XPos(Parent(int(n))) - XPos(int(n))
dy(n) = Level(Parent(int(n))) - Level(int(n))

unset border
unset tics
set offsets 0.25, 0.25, 0.25, 0.25

plot $Tree u 2:3:(dx($1)):(dy($1)) w vec nohead ls -1 not,\
        '' u 2:3 w p pt 7 ps 6 lc rgb 0xccffcc not, \
        '' u 2:3 w p pt 6 ps 6 lw 1.5 lc rgb "black" not, \
        '' u 2:3:4 w labels offset 0,0.1 center not
### end of code

Result:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用gnuplot绘制进程树 的相关文章

  • getRunningAppProcesses 在 Android L (5.1.1) 上返回空列表 [重复]

    这个问题在这里已经有答案了 我刚刚测试了我的应用程序和 CM ATM Android Assistant 等 它们都无法获取正在运行的进程列表 但它们在预操作系统版本上运行良好 那么 Android L 5 1 1 发生了什么 请帮忙 am
  • 如何在gnuplot中将字符串转换为数字

    有没有办法将表示数字 以科学格式 的字符串转换为 gnuplot 中的数字 IE stringnumber 1 0e0 number myconvert stringnumber plot 1 1 number 我可能使用 shell 命令
  • 字符串的 gnuplot 图

    是否可以传递字符串中的绘图数据 我的意思是做这样的事情 plot 09 13 2010 2263 80 09 14 2010 2500 using 1 2 with lines 可以做类似的事情 set xdata time set tim
  • 获取进程的所有 DLL

    我想获取为给定进程加载的所有 dll 的列表 我目前正在使用 NET框架4 0 我知道有一个bug https connect microsoft com VisualStudio feedback details 546430 syste
  • ubuntu 的 CSS 更少(并且自动编译)? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我尝试过 simples 但现在 l
  • 使用 ProcessBuilder 运行 shell 脚本

    我正在尝试使用 Java 和 ProcessBuilder 运行脚本 当我尝试运行时 我收到以下消息 error 2 没有这样的文件或目录 我不知道我做错了什么 但这是我的代码 ps 我尝试只执行不带参数的脚本 错误是相同的 String
  • Python子进程Exec格式错误

    抱歉 如果这个问题很愚蠢 我正在使用Pythonsubprocess在 Ubuntu Natty 11 04 中调用 bat 文件的语句 但是 我收到错误消息 Traceback most recent call last File pfa
  • OpenSSL 未签名证书静默

    遇到了麻烦 还有其他一些相关的帖子 但没有那么具体 我正在尝试为开发机器默默地生成证书 这些是我最初运行的命令 但被要求输入密码 openssl genrsa des3 out server key 1024 openssl req new
  • 用于时间线数据的类似 gnuplot 的程序

    我正在寻找一个类似 gnuplot用于在时间轴中绘制数据图表的程序 类似 gnuplot 在 Linux 上运行 命令行功能 GUI 对我帮助不大 可编写脚本的语法 输出为 jpg png svg 或 gif 输出应该是这样的 set5 s
  • Eclipse Kepler 在 64 位 ubuntu 上冻结

    几天前我刚刚将 Ubuntu 升级到 14 04 并在此过程中从 32 位切换到 64 位 从那时起 Eclipse 就变得非常不稳定 运行几分钟后 它将开始随机冻结越来越长的时间 特别是在代码完成时 已经必须禁用它 而且在剪切 粘贴时 偶
  • 是否有 Ubuntu 10.04 存储库可以下载最新版本的 Eclipse?

    我还没有找到一个可以安装 Eclipse 4 2 Juno 的软件 默认的 Ubuntu 存储库 我使用的是 Ubuntu 10 04 建议我使用古老的 Galileo 版本 我在 Launchpad 上找到了 Eclipse 的页面 该页
  • Docker 不遵循构建目录中的符号链接

    我正在对一个应用程序进行 Docker 化 其中涉及通过 Clang 将二进制文件与其他 C 文件链接 我们维护二进制文件的符号链接版本 因为它们在整个代码库中使用 我的 Docker 构建目录包含整个代码库 包括源文件以及这些源文件的符号
  • 通过名称获取进程ID

    我想在 Linux 下获得一个给定其名称的进程 ID 有没有一种简单的方法可以做到这一点 我还没有在 C 上找到任何可以轻松使用的东西 如果追求 易于使用 char buf 512 FILE cmd pipe popen pidof s p
  • 如何在 Ubuntu/Linux 发行版中安装 Tesseract-OCR 3.03?

    我和一个朋友有兴趣为 CV 项目训练 tesseract OCR 引擎 我们尝试使用一些包装器 例如 PyTesser 和 pyocr 但结果目前不如我们需要的那么准确 因此 我们希望尝试训练超立方体以更好地实现我们的目的 即识别食品标签上
  • PMA 4.5.2.0 file_exists():open_basedir 限制生效

    从 PPA 在我的 Ubuntu 服务器上安装 phpMyAdmin 后 https launchpad net nijel archive ubuntu phpmyadmin https launchpad net nijel archi
  • AltBeacon 服务位于单独的 Android 进程中

    我需要帮助 有一个适用于 Xamarin Android 的应用程序 在其中 启动了一个与 AltBeacon 库配合使用的服务 在此服务中 创建了一个线程 在该线程中不断扫描信标 服务以 StartForeground 启动 该服务应该有
  • 使用 NSWorkspace 获取所有正在运行的进程

    我想获取 MacO 中所有正在运行的进程的列表 当我使用 myWorkspace runningApplications 我只得到当前用户应用程序的列表 我如何找到 root 或 mysql 所有者的所有进程的列表 看一下技术问答 QA11
  • 使用 Upstart 设置内存消耗限制

    我最近变得非常喜欢Upstart 之前我一直在使用 God Monit 和 Bluepill 但我不太喜欢这些解决方案 所以我尝试一下 Upstart 我一直在使用 Foreman gem 为我的流程生成一些基本的 Upstart 配置文件
  • gnuplot:数据表类型值 = 'u' 和直方图框中的奇怪条形

    我之前问过this https stackoverflow com questions 32465409 gnuplot using a logarithmic axis for a histogram问题 这是一个相关的问题 使用test
  • matplotlib 中没有绘图窗口

    我刚刚使用 synaptic 软件包系统在 Ubuntu 9 10 中安装了 matplotlib 但是 当我尝试以下简单示例时 gt gt gt from pylab import plot gt gt gt plot 1 2 3 1 2

随机推荐

  • 如何使用 pybabel 在 jinja 2.10 {% trans %} 中转义 '%' 字符?

    我正在使用 jinja 2 10 和 pybabel 当我的模板包含以下代码 trans 块内有 字符 时 pybabel compile 不会翻译该字符串 提取的字符串 在 po 中 正常 但在结果页面上它根本没有被翻译 h3 class
  • 从 python 中的函数返回左值

    抱歉 我是 Python 新手 虽然这似乎是一个非常基本的问题 但在询问听众之前 我做了尽职调查 试图避免真正愚蠢的问题 我试图找出从函数返回左值的正确习惯用法 假设我有一个包含 64 个对象的容器 并且我希望能够返回对这些对象的引用 cl
  • Wordpress 中的 PhP 联系表单

    所以我买了一个主题 它有一个简单的 PHP 联系表单 允许用户互相发送消息 但是当发件人填写表单并提交时 电子邮件来自我的默认 WordPress 管理员电子邮件 而不是用户输入的电子邮件地址表格 因此 如果收件人尝试回复他们的电子邮件 邮
  • Google Apps 脚本 - 从模板创建的每个文档中都出现“需要授权”

    我有一个 Google 文档 它有一个自定义 UI 菜单 其中包含一个选项 可以将新页面添加到文档并用一些数据填充它 我使用此文档作为模板 通过 Web 应用程序为单个用户创建许多其他文档 因此 我的用户来到我的 web 应用程序 单击生成
  • Boost::bind 和 Boost Phoenix::bind 有什么区别?

    Boost bind 和 Boost Phoenix bind 有什么区别 phoenix bind就好像lambda bind返回一个表达式模板的函数 该模板记录它必须调用给定的函数 它们被设计为分别与phoenix 和lambda 一起
  • 使用 jQuery 克隆

    我有一个允许用户推荐朋友的表格 我想在 朋友电子邮件 和 朋友姓名 这两个输入字段下方添加一个链接 该链接将克隆 朋友框 一次并将其添加到下面 另外 好友邮箱 和 好友姓名 的name属性为name friend email 0 and n
  • 如何将张量转换为字符串

    我正在测试 tf data 这是现在批量提供数据的推荐方法 但是 我正在加载自定义数据集 因此我需要 str 格式的文件名 但是当创建 tf Dataset from tensor slices 时 它们是 Tensor 对象 def lo
  • 根据列聚合过滤选定的列

    我希望仅选择唯一值少于 3 个的列 我可以通过生成布尔掩码pl all n unique lt 3 但我不知道是否可以通过 Polars API 使用该掩码 目前 我正在通过 python 解决这个问题 有更惯用的方法吗 import po
  • Logcat 消息在短时间内消失

    有时 eclipse logcat 消息在关闭应用程序一小段时间后就会消失 大多不会那么短 如何让它永远不会自动消失 编辑 我的设备仍然连接 以及如何将其设置为即使在设备断开连接并在下次启动之前清除后也显示日志 这也发生在我身上 设备已连接
  • Perl 正则表达式 'e' (eval) 修饰符带 s///

    我在理解 e 正则表达式修饰符的简单用法时遇到了一些困难 my var testing In this string we are var the e modifier s w 1 ee print 返回 在此字符串中 我们正在测试 e 修
  • 如何使用 DropDownList 的 SelectedIndexChanged 事件

    我有两个DropDownList在我的网络表单中 当我在第一个下拉列表中选择一个值时 我希望在第二个下拉列表中自动选择一个相关值 这就是我目前所拥有的 table tr td td tr table
  • 合并两个 Sass 文件

    我想即时将两个 sass 文件合并在一起 例如 如果我有 some class color white and some class background color red 那么最终结果将是 some class color white
  • 无法上传 > ~2GB 到 Google Cloud Storage

    追踪如下 相关的Python片段 bucket get bucket location bucket blob bucket blob location path blob upload from filename source path
  • 缩放用户控件中的裁剪像素

    我开发了一个用户控件 用户控件就像一个放大镜 用户控件有一个图像按钮 它显示逐像素裁剪的图像 StorageFile storageFile await StorageFile GetFileFromApplicationUriAsync
  • ASP.NET SimpleMembershipProvider 自动迁移

    因此 我尝试在新的 MVC 4 项目中使用自动迁移 但不知何故它不起作用 我关注了这篇博文 http blog longle net 2012 09 25 seeding users and roles with mvc4 simpleme
  • github 提交中的虚拟文件

    我正在尝试将一些更改推送到我的 github 存储库 但推送失败 因为 git 认为存储库中存在一个大文件 remote Error code 38865a38ccad9b1d9f394c35344906e6 remote warning
  • 使用 -viewWithTag: 当多个视图具有相同的 .tag 时,返回什么 UIView?

    假设我有 4 个 UIView 在 IB 中制作 所有标签属性 2 当我看到以下内容时 UIView thisView UIView self view viewWithTag 2 由于多个 UIView 具有相同的 tag 值 检索该 U
  • 如何使用窗口句柄更改窗口所有者

    我想制作一个 NET 表单作为另一个外部应用程序 与 NET 无关的纯 Win32 的最顶层表单 因此它保持在 Win32App 之上 但不在运行的其余应用程序之上 我有Win32App的句柄 由Win32App本身提供 并且我已经尝试过W
  • 使用“new”时未初始化的 std::complex 构造函数

    在分析我的程序时 我意识到 10 的代码都花在了愚蠢的事情上std complex
  • 使用gnuplot绘制进程树

    类似于这个问题here https stackoverflow com questions 20406346 how to plot tree graph web data on gnuplot我想绘制给定 PID 的进程树 我应该能够将该