More compact hierarchical layout for dot / Graphvi

2019-02-15 14:47发布

问题:

I produce the following PDF with dot:

My main problem is that the character size is too small even when printed on A3. Also it appears that the graph could be made more compact. E.g. the width is extended by the presence of the blue, green and brown nodes on the upper left corner, but I see no reason why the entire first two rows could not be shifted to the right, to result in an at least 20% reduction of width. I attach the .gv file at the end.

Since I automatically generate the .gv file I can only modify graph-level attributes or attributes for all nodes and edges or change the dot invocation, but I can't fine-tune coordinates or particular nodes.

Do you see any obvious ways I could get a more compact layout that would allow larger character sizes?

The invocation I use is:

 dot -Gsize="16.52,11.68" -Gratio="fill"  -Glandscape=false -Gsplines=ortho -Tpdf graph.gv -o graph.gv.pdf

graph.gv file

digraph G {

node [
    fontname="Times-Bold"
]
concentrate=true
"schemas/toolkit.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="cyan"
    label = "{toolkit.xsd|vt.edu|OAI/metadata/toolkit}"
]
"schemas/simpledc20021212.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="salmon3"
    label = "{simpledc20021212.xsd|other domain|http://purl.org/dc/elements/1.1/}"
]
"schemas/stc-v1.30.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="lightskyblue"
    label = "{stc-v1.30.xsd|ivoa|STC/stc-v1.30.xsd}"
]
"schemas/oai_dc.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="limegreen"
    label = "{oai_dc.xsd|openarchives|OAI/2.0/oai_dc/}"
]
"schemas/VOApplication.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="lightskyblue"
    label = "{VOApplication.xsd|ivoa|VOApplication/v1.0rc1}"
]
"schemas/xml.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="violetred1"
    label = "{xml.xsd|w3.org|XML/1998/namespace}"
]
"schemas/xlink.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="violetred1"
    label = "{xlink.xsd|w3.org|1999/xlink}"
]
"schemas/OpenSkyNode-v0.2.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="lightskyblue"
    label = "{OpenSkyNode-v0.2.xsd|ivoa|SkyNode/v0.2}"
]
"schemas/VORegistry-v1.0.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="lightskyblue"
    label = "{VORegistry-v1.0.xsd|ivoa|VORegistry/v1.0}"
]
"schemas/VOResource-v1.0.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="lightskyblue"
    label = "{VOResource-v1.0.xsd|ivoa|VOResource/v1.0}"
]
"schemas/ConeSearch-v1.0.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="lightskyblue"
    label = "{ConeSearch-v1.0.xsd|ivoa|ConeSearch/v1.0}"
]
"schemas/CEAService.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="lightskyblue"
    label = "{CEAService.xsd|ivoa|CEA/v1.0rc1}"
]
"schemas/VOTable.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="lightskyblue"
    label = "{VOTable.xsd|ivoa|VOTable/v1.1}"
]
"schemas/CEABase.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="lightskyblue"
    label = "{CEABase.xsd|ivoa|CEA/base/v1.0rc1}"
]
"schemas/STAP.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="yellow"
    label = "{STAP.xsd|astrogrid urn|STAP:v1.0}"
]
"schemas/VODataService-v1.0.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="lightskyblue"
    label = "{VODataService-v1.0.xsd|ivoa|VODataService/v1.0}"
]
"schemas/SIA-v1.0.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="lightskyblue"
    label = "{SIA-v1.0.xsd|ivoa|SIA/v1.0}"
]
"schemas/SSA-v0.4.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="lightskyblue"
    label = "{SSA-v0.4.xsd|ivoa|SSA/v0.4}"
]
"schemas/RegistryInterface-v1.0.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="lightskyblue"
    label = "{RegistryInterface-v1.0.xsd|ivoa|RegistryInterface/v1.0}"
]
"schemas/SSA-v1.0.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="lightskyblue"
    label = "{SSA-v1.0.xsd|ivoa|SSA/v1.0}"
]
"schemas/TAPRegExt-v1.0.xsd" [
    shape = "record"
    style="bold, filled"
    fillcolor="lightskyblue"
    label = "{TAPRegExt-v1.0.xsd|ivoa|TAPRegExt/v1.0}"
]
"NFhttp://www.ivoa.net/xml/VOMetadata/v0.1" [
    shape = "record"
    color = "magenta1"
    fillcolor = "lemonchiffon1"
    style="bold, dashed, rounded, filled"
    label = "{ivoa|VOMetadata/v0.1}"
]
"NFhttp://www.w3.org/2001/XMLSchema-instance" [
    shape = "record"
    color = "magenta1"
    fillcolor = "lemonchiffon1"
    style="bold, dashed, rounded, filled"
    label = "{w3.org|2001/XMLSchema-instance}"
]
    "schemas/stc-v1.30.xsd" -> "schemas/xlink.xsd" [color="blue"]
    "schemas/oai_dc.xsd" -> "schemas/simpledc20021212.xsd" [color="blue"]
    "schemas/VOApplication.xsd" -> "schemas/VOResource-v1.0.xsd" [color="blue"]
    "schemas/VOApplication.xsd" -> "NFhttp://www.ivoa.net/xml/VOMetadata/v0.1" [color="blue"]
    "schemas/OpenSkyNode-v0.2.xsd" -> "schemas/VOResource-v1.0.xsd" [color="blue"]
    "schemas/OpenSkyNode-v0.2.xsd" -> "schemas/VODataService-v1.0.xsd" [color="blue"]
    "schemas/OpenSkyNode-v0.2.xsd" -> "NFhttp://www.ivoa.net/xml/VOMetadata/v0.1" [color="blue"]
    "schemas/VORegistry-v1.0.xsd" -> "schemas/VOResource-v1.0.xsd" [color="blue"]
    "schemas/VORegistry-v1.0.xsd" -> "NFhttp://www.ivoa.net/xml/VOMetadata/v0.1" [color="blue"]
    "schemas/VOResource-v1.0.xsd" -> "NFhttp://www.ivoa.net/xml/VOMetadata/v0.1" [color="blue"]
    "schemas/ConeSearch-v1.0.xsd" -> "schemas/VOResource-v1.0.xsd" [color="blue"]
    "schemas/ConeSearch-v1.0.xsd" -> "NFhttp://www.ivoa.net/xml/VOMetadata/v0.1" [color="blue"]
    "schemas/CEAService.xsd" -> "schemas/VOTable.xsd" [color="blue"]
    "schemas/CEAService.xsd" -> "schemas/VODataService-v1.0.xsd" [color="blue"]
    "schemas/CEAService.xsd" -> "schemas/VOResource-v1.0.xsd" [color="blue"]
    "schemas/CEAService.xsd" -> "NFhttp://www.ivoa.net/xml/VOMetadata/v0.1" [color="blue"]
    "schemas/CEAService.xsd" -> "schemas/CEABase.xsd" [color="blue"]
    "schemas/CEAService.xsd" -> "schemas/VOApplication.xsd" [color="blue"]
    "schemas/CEABase.xsd" -> "schemas/VODataService-v1.0.xsd" [color="blue"]
    "schemas/STAP.xsd" -> "schemas/VOResource-v1.0.xsd" [color="blue"]
    "schemas/VODataService-v1.0.xsd" -> "schemas/VOResource-v1.0.xsd" [color="blue"]
    "schemas/VODataService-v1.0.xsd" -> "schemas/stc-v1.30.xsd" [color="blue"]
    "schemas/VODataService-v1.0.xsd" -> "NFhttp://www.ivoa.net/xml/VOMetadata/v0.1" [color="blue"]
    "schemas/SIA-v1.0.xsd" -> "schemas/VOResource-v1.0.xsd" [color="blue"]
    "schemas/SIA-v1.0.xsd" -> "schemas/VODataService-v1.0.xsd" [color="blue"]
    "schemas/SIA-v1.0.xsd" -> "NFhttp://www.ivoa.net/xml/VOMetadata/v0.1" [color="blue"]
    "schemas/SSA-v0.4.xsd" -> "schemas/VOResource-v1.0.xsd" [color="blue"]
    "schemas/SSA-v0.4.xsd" -> "schemas/VODataService-v1.0.xsd" [color="blue"]
    "schemas/SSA-v0.4.xsd" -> "NFhttp://www.ivoa.net/xml/VOMetadata/v0.1" [color="blue"]
    "schemas/RegistryInterface-v1.0.xsd" -> "schemas/VOResource-v1.0.xsd" [color="blue"]
    "schemas/SSA-v1.0.xsd" -> "schemas/VOResource-v1.0.xsd" [color="blue"]
    "schemas/SSA-v1.0.xsd" -> "NFhttp://www.ivoa.net/xml/VOMetadata/v0.1" [color="blue"]
    "schemas/TAPRegExt-v1.0.xsd" -> "schemas/VOResource-v1.0.xsd" [color="blue"]
    "schemas/TAPRegExt-v1.0.xsd" -> "NFhttp://www.ivoa.net/xml/VOMetadata/v0.1" [color="blue"]
    "schemas/TAPRegExt-v1.0.xsd" -> "NFhttp://www.w3.org/2001/XMLSchema-instance" [color="blue"]

}

回答1:

The unflatten utility can lead to a more compact graph.

Try the following command line:

unflatten -f -l 2 graph.gv | dot -Gsize="16.52,11.68" -Gratio="fill"  -Glandscape=false -Gsplines=ortho -Tpdf -o graph.gv.pdf

Depending on your various automatically generated graphs, maybe some other values for unflatten are more appropriate to cover all of them.



标签: graphviz dot