I am using concentrate=true to make nodes with large number of outgoing edges look better. However, when edges with different styles (solid and dashed) share paths, dashed style is often used for the combined edge. Is there any way to make dot render these combined edges as solid?
Related
I would like to increase the border width of my nodes, but I find that the arrow heads in digraph edges do not respect the added width. Instead, they sink into the border. Here's my simple graph.
strict digraph {
a [penwidth="10.0"];
b [penwidth="10.0"];
a -> b;
}
How could I either increase the node width safely, or distance the edges further back? Reading through the attribute list, I didn't find a way. The closest was peripheries, but it makes multiple narrow peripheries instead of a thick one, but the edges do stick to the outermost periphery.
This is a known bug: https://forum.graphviz.org/t/allign-nodes-stroke-with-end-of-the-arrows-path-width/462
The only work-around I know is to "move" node b or shorten the edge - described in the bug report.
I try to use graphviz to draw graph with minimum crossing number to make it understandable. Graphviz do it well with default settings, but sometimes it create many intersections of outgoing arrows.
Can I change the style of drawing lines outgoing using DOT language? Problem lines is
33->105;
33->73;
33->45;
If you use dot for your layout, you may try using concentrate=true which does merge edges in some cases:
Example:
I have a graph with a lot of objects. A number of these objects have no links. GraphVis lays these out on one long horizontal line on the top of the diagram.
Is there anyway to make GraphViz have a maximum width, so unconnected objects go on the next "line" ?
Add invisible edges between them. This will force graphviz to layout these nodes like the ordinary ones.
I would like to use graphviz for a project and am unable to get the behaviour I want. I have a graph that I can draw with graphviz just fine, but I also have a version of the same graph that has some extra edges. I would like the second graph to be drawn with the nodes in the same positions as the first one and the edges in the same positions, but the new edges to be drawn without avoiding any overlap with nodes.
To get a better idea of what I want, imagine a Powerpoint slide with a graph and then on the next slide the same graph with these extra edges that appear on top of the first graph, wihtout modifying the look of the old parts of the graph. That is the effect I want.
I think the effect could be achieved by having some edges ignore any overlapping constraints. I could not figure out how to control the overlap between edges and nodes for particular edges (or even for all edges).
Any ideas?
You can get dot to output another .dot file, with positions assigned to all elements, via dot -Tdot (or maybe dot -Txdot). Add your additional edges to that file, and run it through dot again to produce your second graph.
I am trying to draw a graph with Graphviz.
I wish to draw a dotted line around a set of vertices, symbolizing that they are a part of a bigger entity.
Say for example, if I have three vertices as eggs, chicken and ham, I should be able to draw a dotted line around all three of them, and label that border as food.
It is possible to group nodes in graphviz by putting them into a cluster. A cluster is a special kind of subgraph which certain layout engines (dot, fdp, ...) support, and if supported, the nodes in a cluster will be drawn together.
From the documentation:
If the name of the subgraph begins with cluster, Graphviz notes the
subgraph as a special cluster subgraph. If supported, the layout
engine will do the layout so that the nodes belonging to the cluster
are drawn together, with the entire drawing of the cluster contained
within a bounding rectangle.
Note that, for good and bad, cluster
subgraphs are not part of the DOT language, but solely a syntactic
convention adhered to by certain of the layout engines.
Important: The ID of the subgraph has to start with cluster.
Example:
graph g{
subgraph cluster_food {
eggs; chicken; ham;
label="Food";
graph[style=dotted];
}
}