我有以下点:
digraph G
{
rank="same";
subgraph sys
{
1 [shape=record, label="| | Système"];
}
subgraph obj
{
2 [shape=box, label="Sites"];
3 [shape=box, label="Sociétés de\nmaintenance"];
1 -> 2 [arrowhead=none] [label="a"];
1 -> 3 [arrowhead=none] [label="b"];
}
subgraph constraints
{
4 [style=dotted, label="Surveiller"];
5 [style=dotted, label="Effectuer des\ninterventions"];
4 -> 2 [style=dotted];
4 -> 3 [style=dotted];
5 -> 2 [style=dotted];
5 -> 3 [style=dotted];
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我这张图片:

但是我想按列创建一个子图(第一列为1,第二列为2-3,最后列为4-5)。
有没有办法做到这一点?
对于您的帮助,在此先感谢。
我有这个Graphviz图:
digraph
{
rankdir="LR";
overlap = true;
Node[shape=record, height="0.4", width="0.4"];
Edge[dir=none];
A B C D E F G H I
A -> B -> C
D -> E -> F
G -> H -> I
Edge[constraint=false]
A -> D -> G
subgraph clusterX
{
A
B
}
subgraph clusterY
{
E
H
F
I
}
}
Run Code Online (Sandbox Code Playgroud)
产生这个输出:

我原本期望A和D之间的边缘长度最小化,以便节点排列为:
A B C
D E F
G H I
Run Code Online (Sandbox Code Playgroud)
而不是
D E F
G H I
A B C
Run Code Online (Sandbox Code Playgroud)
如果我删除子图定义,这将按预期工作.
为什么Graphviz在引入子图时将ABC置于底部?
我有一个主图和另一个小图,假设小图可以在主图中重复为具有相似程度的子图(不一定是相同的小图)什么是一个好的算法(或Java库)来找到它们所有?
考虑以下子图,包含5个Mrecod节点:

有没有办法强制垂直方向,节点在彼此之上?我rankdir=TB在子图中试过,没有效果.
我在Ubuntu下运行graphviz,没有特殊参数:
dot -Tpng graph.dot -o img/graph.png
Run Code Online (Sandbox Code Playgroud) 我正在使用 Networkx 来计算图的一些度量,例如直径、聚类系数等。如何对整个图执行此操作很简单。我感兴趣的是在具有相同属性(比如颜色)的节点之间找到这些度量。我在想,如果我可以将图形划分为不同的子图形,其中每个子图形中的节点具有相同的颜色,那么我可以继续测量这个子图形中的直径。所以我的问题是:有没有办法将图划分为包含相同颜色节点的子图?
我真的很感激任何见解。
考虑以下 Graphviz 代码:
digraph g1 {
compound = true;
node [shape = box, style=filled, fillcolor=Khaki] a;
subgraph sg1 {
node [shape = "", style="", fillcolor=""] b -> c;
graph [style=solid, penwidth=3];
}
}
Run Code Online (Sandbox Code Playgroud)
这产生:
为什么我没有得到子图/簇周围的边框?
在下图中,两个子图不可见,但所有节点似乎都是随机放置的。如何创建可见的子图,例如一个盒子里面有我的 PlayerChars,另一个盒子里面有 NonPlayerChars?
digraph "All Characters" {
subgraph PlayerChars {
label = "Player Characters";
node [style=filled,color=yellow];
Char1 -> Char2 [ label = "is sister of" ];
Char1 -> Char2 [ label = "is brother of" ];
label = "PCs";
}
subgraph NonPlayerChars {
label = "Non-Player Characters";
Person1 -> Char2 [label="hates"];
Char2 -> Person1 [label="is indifferent"];
Person2 -> Char2 [label="stole from"];
Person1 -> Person2 [label="is father of"];
Person2 -> Person1 [label="is daughter of"];
Char1 -> Person2 [label="is in love with"]; …Run Code Online (Sandbox Code Playgroud) 我想获得图中所有周期的子图。我尝试了下面的代码
for (i in 1:length(cycles)){
vids<-as.numeric(unlist(cycles[[i]]))
subgraph<- induced.subgraph(graph, vids)
}
Run Code Online (Sandbox Code Playgroud)
但是它会抛出如下错误:
Error in .Call("R_igraph_induced_subgraph", graph, vids - 1, impl, PACKAGE = "igraph") :
At iterators.c:759 : Cannot create iterator, invalid vertex id, Invalid vertex id
Run Code Online (Sandbox Code Playgroud)
我发现该代码可与cycles列表中的第二个元素一起使用,该元素较短,但第一个元素不是。因此,如果我尝试这样做会起作用,
subgraph<- induced.subgraph(g, c(3,4))
Run Code Online (Sandbox Code Playgroud)
但不是
subgraph<- induced.subgraph(g, c(26, 2, 30, 29, 25, 9, 27, 13, 14, 8, 23, 20, 19, 17, 12, 11, 24, 21, 6, 28, 15,3,4))
Run Code Online (Sandbox Code Playgroud)
同样,欢迎提出任何替代for循环的建议。
一个可重现的示例:
library(igraph)
graph<-graph(c(1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,
16,17,17,18,18,19,19,20,20,21,21,1,22,23,23,22),directed=T)
V(graph)$name<-c(26, 2, 30, 29, 25, 9, 27, 13, 14, 8, …Run Code Online (Sandbox Code Playgroud) 是否存在一种算法来查找跨越DAG的最大权重,该DAG在有向图中弱连接,其中每个切割具有弱连接的集合(从一个集合到另一个集合至少有一个有向路径)?或者这是一个NP难题?关于这个主题的上一个问题没有指定https://mathoverflow.net/questions/31864/algorithms-for-maximum-weighted-spanning-connected-dag-directed-acyclic-graph弱或强连接,所以我想成为更确切.
我想显示一个a指向一个节点的节点b。b位于子图中。以下点图可视化代码应该可以工作。
digraph
{
a;
subgraph cluster_mysubgraph
{
a->b;
}
}
Run Code Online (Sandbox Code Playgroud)
唉,虽然节点a是在任何子图之外声明的,但它是在内部渲染的mysubgraph(在 Ubuntu 14.04 上的 graphviz 2.36.0 上观察到):

我尝试过诸如预声明b之类的变体。没有成功。
解决方法是在另一个集群子图中声明a。
digraph
{
subgraph cluster_pseudo
{
a;
}
subgraph cluster_mysubgraph
{
a->b;
}
}
Run Code Online (Sandbox Code Playgroud)
这可以防止a出现在 内部mysubgraph,但另一个子图并不是真正的选择。

a实际上应该在任何子图之外。
我正在寻找一种基于至少一个入射在该边缘上的顶点的顶点属性得分的子图边缘的方法.
有一个简单的方法吗?
有什么建议?