我正在构建一个点文件来表示计算机硬件以及与网络交换机和显示器的物理连接.我通过点程序处理它看起来不错,但我认为我真的希望它由neato处理以创建一个更"自由形式"的图片,因为它开始出现问题.现在当我用neato运行我的大文件时,一切都重叠了.
我试图找出定义overlap属性的语法.下面是我的点文件的子集.
graph g {
node [shape=record,height=.1];
PC8[label="{{<GigE1>GigE1|<GigE2>GigE2}|{<name>PC8}|{<dvi1>dvi1|<dvi2>dvi2|<dvi3>dvi3|<dvi4>dvi4}}"];
PC9[label="{{<GigE1>GigE1|<GigE2>GigE2}|{<name>PC9}|{<dvi1>dvi1|<dvi2>dvi2|<dvi3>dvi3|<dvi4>dvi4}}"];
C1[label = "{{<dvi1>dvi1}|{<name>C1}}"];
C2[label = "{{<dvi1>dvi1}|{<name>C2}}"];
C3[label = "{{<dvi1>dvi1}|{<name>C3}}"];
C4[label = "{{<dvi1>dvi1}|{<name>C4}}"];
D1[label = "{{<dvi1>dvi1}|{<name>D1}}"];
D2[label = "{{<dvi1>dvi1}|{<name>D2}}"];
"PC8":dvi1 -- "C1":dvi1;
"PC8":dvi2 -- "C2":dvi1;
"PC8":dvi3 -- "C3":dvi1;
"PC8":dvi4 -- "C4":dvi1;
"PC9":dvi1 -- "D1":dvi1;
"PC9":dvi2 -- "D2":dvi1;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Graphviz(符合neato)创建图形,我想将节点放在特定位置.为此,我为所有边指定了精确的边长.但是,我不希望所有边缘在最终图像中可见.
你知道隐藏边缘的方法吗?我应该提一下,我尝试将边缘着色为白色,但是发生的是我在图形节点上画了白线 - 它不是很美观......
我试图绘制一个包含许多节点和边的图.
但是,图形变得过于笨拙,节点和边缘重叠.我试过(不成功),以下,全部或这些的组合.
size = "12.0, 20.0!";
margin = 0.0;
len = 1.0;
Run Code Online (Sandbox Code Playgroud)
我neato用来生成一个png文件.
尺寸规格似乎甚至没有效果.
任何提示将不胜感激.
我有以下dot/neato文件...
graph G
{
node [color=Red]
r01
r02
r03
r04
r05
r06
r07
r08
r09
r10
r11
node [color=Blue]
p01
p02
p03
p04
p05
p06
p07
p08
p09
p10
p11
p12
p13
r01 -- r02
r01 -- p01
r01 -- p02
r02 -- p01
r02 -- p02
p01 -- p02
r03 -- p03
r04 -- r05
r04 -- p04
r04 -- p05
r04 -- p06
r05 -- p04
r05 -- p06
p04 -- p05
p04 -- p06
r06 -- r07 …Run Code Online (Sandbox Code Playgroud) 我的问题与此问题基本相同,但给定的答案对我不起作用.
下面是一个示例渲染(源极)与
compound=true;
overlap=scalexy;
splines=true;
layout=neato;
Run Code Online (Sandbox Code Playgroud)

边缘有一些不必要的重叠,但这不是太糟糕,主要问题是所有浪费的空间.
我尝试过设置sep=-0.7;,这就是发生的事情.

间距要好得多,但现在与节点有一些重叠.我尝试了不同的overlap参数,这是唯一一个提供远程可接受结果的参数.
我尝试更改为fdp布局并在K全局设置spring常量属性,但我只是得到这样的东西:

来源是所有直截了当a--b--c的东西,没有花哨的技巧.
我想要的是尽可能缩短所有边缘(最多),只要这种调整不会引入任何新的重叠,这是sep完全失败的地方.对于布局引擎而言,这似乎不应该太难.是否可以使用graphviz套件?我不介意更改渲染软件,但我不想在每个节点或每个边缘基础上注释源.
我理想的结果是最小化边长的偏差,一次被认为是一个节点,即每个节点除了必要的例外之外还有相等长度的边,但这是一厢情愿的想法.优先级是减少每条边的长度,其约束条件是不会引入重叠.
我将接受部分解决方案,但它们必须是全自动和开源的.
我怎样才能做到这一点?谢谢.
我试图在python(v 2.7)中使用pygraphviz和networkx来创建网络映射.我找到了一个在stackoverflow上看起来非常有用的脚本:
import networkx as nx
import numpy as np
import string
import pygraphviz
dt = [('len', float)]
A = np.array([(0, 0.3, 0.4, 0.7),
(0.3, 0, 0.9, 0.2),
(0.4, 0.9, 0, 0.1),
(0.7, 0.2, 0.1, 0)
])*10
A = A.view(dt)
G = nx.from_numpy_matrix(A)
G = nx.relabel_nodes(G, dict(zip(range(len(G.nodes())),string.ascii_uppercase)))
G = nx.to_agraph(G)
G.node_attr.update(color="red", style="filled")
G.edge_attr.update(color="blue", width="2.0")
G.draw('/tmp/out.png', format='png', prog='neato')
Run Code Online (Sandbox Code Playgroud)
我在最后一行收到错误,基本上找不到neato:
"ValueError:在路径中找不到程序neato."
该错误引用了agraph.py文件pygraphviz,但是当我查看agraph.py时,我看不到任何可能导致问题的内容
任何想法如何解决这个问题?我正在使用Windows和IDLE进行编码.谢谢!
我手动指定了每个节点的起始位置并设置了splines = true.
生成的图像如下所示:

1031和1028之间的样条似乎触及节点1030和1029.我只是想知道是否有办法增加边距.我已经尝试指定esep ="+ 3,3"以在节点周围提供非常高的余量,但仍然输出相同的图形.
布局引擎是neato.我希望在a到c的箭头和节点b之间有更多的空间.margin并pad没有帮助neato.这是我的图:
digraph G {
splines=true
a [pos="0.0,0.0!"];
b [pos="0.0,1.0!"];
c [pos="0.0,2.0!"];
a -> b;
a -> c;
b -> c;
}
Run Code Online (Sandbox Code Playgroud)

那可能吗?
我想生成这样的简单线性排列:

我觉得我这么做太难了.我试着对位置进行硬编码,但它有点复杂,因为我想要花键边缘.
如果边缘在上方或下方,我并不特别在意,但指定这将是一个很好的功能.