Comment définir la taille de la sortie en GraphViz pour la dot format?
Je veux faire en sorte que tous les nœuds sont dans une certaine gamme (dire [0,0,W,H]) après sa mise en page.
J'ai pensé que la boîte englobante serait la solution à l'aide de la bb
attribut, mais les deux dot et neato simplement le remplacer.
Par exemple, mon graphique:
strict digraph {
1,2,3;
1 -> 3;
3 -> 2;
}
Sortie de neato -Gbb="0,0,50,50" -T dot file.txt
:
strict digraph {
graph [bb="0,0,120.49,162.36"];
node [label="\N"];
1 [height=0.5,
pos="27,18",
width=0.75];
3 [height=0.5,
pos="70.233,75.918",
width=0.75];
1 -> 3 [pos="e,57.954,59.469 39.043,34.133 43.004,39.441 47.504,45.468 51.827,51.261"];
2 [height=0.5,
pos="93.485,144.36",
width=0.75];
3 -> 2 [pos="e,87.436,126.56 76.221,93.545 78.643,100.67 81.496,109.07 84.177,116.97"];
}
- Je obtenir les mêmes positions pour toute valeur de bb
ou toute combinaison de size
et dpi
.
Ce dont j'ai besoin, c'est d'avoir tous les nœuds à l'intérieur d'une boîte.
Des suggestions à faire?
Histoire complète:
Je suis en utilisant *graphviz_layout* de networkx à la disposition de mon graphe. J'ai dessiner le graphe avec pyprocessing. Je veux éviter de re-mise à l'échelle les résultats de *graphviz_layout*, si il y a une manière de dire à mon neato limites à la place.
Vous devez vous connecter pour publier un commentaire.
Voici le TL;DR version:
Pour générer un 900 à 1500 pixels d'image PNG à partir du graphique de foo.gv, vous pouvez exécuter:
pour donner une image, c'est exactement 900 pixels de large ou 1500 de haut, mais pas nécessairement à la fois; et puis:
pour remplir l'image avec un espace de sorte qu'il est exactement de 900 à 1500 pixels; où
convert
fait partie de la ImageMagick suite.Voici l'explication détaillée:
À préciser:
Le
bb
l'attribut est marqué comme "écriture seule", de sorte qu'aucun de Graphviz mise en page des moteurs sont enclins à respecter quelles que soient les valeurs de soumettre avant le traitement.Dans le cas général, Graphviz peut générer à la fois vecteur (extensible) et graphiques bitmap, afin que le DPI n'est pas toujours un paramètre significatif.
En particulier, la
ppp
attribut est uniquement valable pour les images bitmap et SVG formats de sortie.Ce que vous essayez de faire, c'est un peu compliqué, comme la taille en pixels d'une image générée par Graphviz est conduit par un couple de l'interaction des attributs.
Prenons un graphe arbitraire comme un exemple.
La commande
gvgen -dh3
va générer une hypercube de degré trois. (Si vous souhaitez plus de détails sur ce, un PDF, un rendu de gvgen de la page de man est ici, mais il n'a pas d'importance, c'est juste un graphe arbitraire des fins de démonstration.)Un défaut de dot généré PNG rendu de ce graphe peut être créé en exécutant la commande:
Quand je fais ça, je reçois un 275 x 347 pixels PNG (bitmap) de l'image. (Tel que rapporté par
file example.png
.)La
taille
attribut permet de vous recommander un maximum souhaité de la hauteur et de la largeur de l'image de sortie en pouces. I. e., l'attributsize=3,5
dit Graphviz pour générer un 3 par 5 pouces de l'image au plus. Si l'image est plus petite que 3 par 5 pour commencer, Graphviz va le laisser seul. Si l'image est plus grande que 3 pouces par 5 pouces pour commencer, Graphviz de mise à l'échelle vers le bas jusqu'à ce qu'elle s'inscrit dans un 3 par 5 pouces de toile (en conservant le ratio d'aspect de l'image d'origine).L'ajout d'un point d'exclamation changements de la
size
attribut à partir d'une taille maximale pour un souhaité taille. Maintenant, si les deux dimensions sont plus petites que la taille spécifiée, le dessin à l'échelle jusqu'à ce que au moins un dimension est égale à la taille spécifiée.Par exemple, en cours d'exécution:
(Notez que
\!
échappe le point d'exclamation pour bash. Dans un POINT fichier que vous voulez juste écriresize=3,5!
.)génère un 288 x 363 pixels de l'image, légèrement plus grand que les deux dimensions que par défaut.
Comment ne point venir à ces chiffres? Eh bien, la Graphviz par défaut de la valeur des DPI est de 96 pixels par pouce. À cette résolution, un 3 par 5 pouces image est de 288 480 pixel image. Le moteur de mise en forme a tout simplement mis à l'échelle de l'image jusqu'à ce qu'au moins une des dimensions correspondait à la taille désirée.
Vous pouvez remplacer la valeur par défaut valeur des DPI à l'aide de la
ppp
l'attribut, comme suit:Maintenant l'image générée par les mesures de 600 757 pixels. Encore une fois, Graphviz simplement mis à l'échelle de l'image jusqu'à ce que l'une des dimensions correspondait à la taille désirée (mais à cette résolution, un 3 par 5 pouces de l'image de 600 x 1000 pixels de l'image).
Donc si vous voulez générer une image qui contient un nombre arbitraire de pixels, vous devez définir les deux
size
etdpi
de façon appropriée.I. e., supposons que vous voulez créer une de 900 à 1500 pixels de l'image. Vous pouvez utiliser:
ou
ou encore:
(Mais alors que ce dernier semblait fonctionner pour moi en test rapide, je le recommande pour coller au plus classique DPI valeur juste au cas où.)
Qui résout la plupart de votre problème, mais note que Graphviz est seulement à l'échelle de l'image jusqu'à ce que un des dimensions correspond à la taille indiquée. Selon le rapport d'aspect de l'image d'origine que vous pouvez ou ne pouvez pas obtenir la taille exacte que vous cherchez.
C'est là que le
rapport
l'attribut entre en jeu.La commande:
devrait vous donner une image avec les dimensions précises que vous recherchez, mais avec un couple de mises en garde:
Dans la pratique, il semble parfois d'obtenir une taille légèrement différente de désiré. E. g., lorsque je lance la commande ci-dessus, je reçois un 900 en 1472 pixel de l'image (plutôt que de 900 à 1500). Je ne sais pas si cela est dû à l'erreur d'arrondi ou quoi.
Pour atteindre cet objectif, Graphviz doit échelle de la mise en page de façon indépendante dans chaque dimension. Il est assez intelligent à l'échelle de la disposition et pas le image, de sorte que l'image ne soit pas déformée de soi, mais en fonction de la façon dont différents votre demande de rapport d'aspect est de la mise en page du "naturel" ratio d'aspect de la horizontaux ou verticaux espacement peut paraître un peu bizarre.
ratio
accepte aussi quelques valeurs différentes. Voir la documentation et/ou d'expérimenter un peu pour voir ce qu'ils font.Pour ce que ça vaut, si littéralement, vous voulez une image précise des dimensions en pixels que vous demandez, ma suggestion serait de laisser Graphviz l'échelle de l'image telles que l'un des deux cotes des matchs et ensuite utiliser quelque chose comme ImageMagick pour remplir l'image pour accéder à la précision des proportions que vous êtes à la recherche pour. E. g., la commande:
centre de l'image (de
in.png
) sur une de 900 à 1500 pixels de la toile (en l'enregistrant dansout.png
) par remplissage de la horizontaux ou verticaux nécessairesmargin
pour paginé médias.