[HN Gopher] Graphviz: Open-source graph visualization software
       ___________________________________________________________________
        
       Graphviz: Open-source graph visualization software
        
       Author : davesailer
       Score  : 287 points
       Date   : 2022-01-17 13:02 UTC (9 hours ago)
        
 (HTM) web link (graphviz.org)
 (TXT) w3m dump (graphviz.org)
        
       | enter-haken wrote:
       | I use graphviz to get a quick postgresql schema overview (good
       | for small to medium databases)
       | 
       | https://github.com/enter-haken/schema
        
         | kh1 wrote:
         | That looks really cool. Would you possibly share the script?
        
           | enter-haken wrote:
           | It's part of the repo.
           | 
           | https://github.com/enter-haken/schema/blob/master/schema.sh
           | 
           | It's a mixture of sed, awk and sql.
        
             | kh1 wrote:
             | Oh I did take a quick look at the repo but didn't notice it
             | was in the SQL. Thank you!
        
         | magicpointer wrote:
         | In a similar vein there is Schemaspy[1]. It generates a static
         | documentation website for your DB, which also uses GraphViz to
         | build ER diagrams.
         | 
         | [1] https://github.com/schemaspy/schemaspy
        
       | TruffleLabs wrote:
       | I used this to generate relationship diagrams between companies,
       | adding in projects and who is working on what; the final image
       | was a map of an ecosystem of that set of businesses.
        
       | justsomehnguy wrote:
       | PSGraph is a PowerShell module to dynamically generate dot files.
       | 
       | I used it (with a various degree of success) to plot some
       | diagrams for my personal usage.
       | 
       | https://github.com/KevinMarquette/PSGraph
        
       | thangalin wrote:
       | My text editor, KeenWrite[0] renders Graphviz diagrams in near
       | real-time. KeenWrite extends the functionality a little by
       | allowing the use of variables inside the diagrams. In the example
       | diagram[1], the 350 value stems from a variable and its value is
       | shown near the top.
       | 
       | [0]: https://github.com/DaveJarvis/keenwrite
       | 
       | [1]: https://i.ibb.co/CVfsJDh/hacker-news.png
        
       | ngcc_hk wrote:
       | Javascript and html version needed.
        
         | 0x138d5 wrote:
         | Depending on what you're doing Cytoscape.js might also work.
         | 
         | https://js.cytoscape.org/
        
           | istillwritecode wrote:
           | I found cytoscape to be annoying because it assumes you are
           | using npm.
        
             | tunesmith wrote:
             | Not sure what you mean, you can install it other ways, and
             | the dist is packaged up in a variety of ways.
             | (https://github.com/cytoscape/cytoscape.js)
        
         | jdlshore wrote:
         | There's viz.js. I use it at objectplayground.com to visualize
         | JavaScript object layouts. This file shows how I use it:
         | 
         | https://github.com/jamesshore/object_playground/blob/master/...
        
         | kjhughes wrote:
         | - Dagre (deprecated, unfortunately): https://github.com/dagrejs
         | 
         | - Viz.js (via Emscripten): https://github.com/mdaines/viz.js;
         | Online demo: http://viz-js.com/
        
           | AtNightWeCode wrote:
           | I think dagre was ok but oversold the quality of the algos it
           | used a bit. In many cases it can be better to use a SVG file
           | generated from Graphviz directly instead.
        
           | tunesmith wrote:
           | An alternative to dagre-d3 is d3-dag:
           | https://github.com/erikbrinkman/d3-dag
           | 
           | I've had good success with cytoscapejs as well, integrating
           | with react so the graph will animate layout on transition. I
           | use elk, which is apparently superior to sugiyama (the
           | algorithm graphviz uses for force-directed dag layouts).
        
           | dylanowen wrote:
           | Viz.js had some hard coded memory limits last time I checked.
           | You can work around them on load, but it's annoying.
           | 
           | Edit: GraphQL Voyager has the memory increase hack
           | https://github.com/APIs-guru/graphql-
           | voyager/blob/54a178142a...
        
         | dylanowen wrote:
         | https://github.com/hpcc-systems/hpcc-js-wasm was pretty easy to
         | integrate into my last project
        
           | RBerenguel wrote:
           | Agreed, I have a kind-of-live graphviz editor in a webpage,
           | with autocomplete and a few more things. Was fun to hack
           | together
        
         | nxpnsv wrote:
         | https://mermaid-js.github.io/mermaid/#/
        
           | berkes wrote:
           | I used to generate most of my diagrams in PlantUML[0], but
           | recently found that my not-taking app, Joplin[1], has Mermaid
           | built in.
           | 
           | PlantUML has the benefit that you can include it in your
           | builds, e.g. parse any .plantuml files in `make doc` or in
           | your CI.
           | 
           | But I like Mermaid more: its easier to read, less quirky and
           | easily integratable in the markdown (or note-taking apps)
           | without the need for extra build steps.
           | 
           | [0] https://plantuml.com/ [1] https://joplinapp.org/
        
           | kasperset wrote:
           | One of my favorite applications in R that can make Graphviz
           | like plots: http://rich-
           | iannone.github.io/DiagrammeR/index.html
        
       | tonerow wrote:
       | Way fewer features but probably easier to use ~>
       | https://flowchart.fun
       | 
       | Exports to SVG, PNG, JPG
        
         | pc86 wrote:
         | This looks cool and like a novel way to generate the graphs,
         | I'll have to take a look
        
       | ncc-erik wrote:
       | I maintain an open-source project [1] that uses graphs to model
       | data. I wanted to make my project as accessible as possible, so
       | Graphviz was perfect since it's dead-simple to install and use on
       | all major OS platforms.
       | 
       | [1] https://github.com/nccgroup/PMapper
        
       | paphillips wrote:
       | I've used GraphViz a number of times and highly recommend it as a
       | standard tool on your belt. Having a stand-alone executable that
       | can export to SVG is great.
       | 
       | The most complex thing I've done with it [1]: a tool (MIT-
       | license) that builds diagrams of the data and addressing pipeline
       | for a DSP processor, and lets one 'scrub through' the assembler
       | code frame by frame and see the values propagate through the
       | blocks.
       | 
       | Also PlantUML [2] uses it for most diagrams.
       | 
       | Getting layout and positioning the way you want can be tricky but
       | is usually achievable with patience and hidden objects.
       | 
       | [1] https://github.com/paphillips/DFB [2]
       | https://plantuml.com/graphviz-dot
        
         | thrwawy283 wrote:
         | My graphviz-fu got so much better when I started using
         | invisible objects for the grid-like layouts. At that point
         | you're just using graphviz for positioning/spacing/styling
         | instead of creating the overall topology.
        
           | buzzwordninja wrote:
           | This sounds interesting, can you expand on that a bit please?
        
       | carlhjerpe wrote:
       | FRA, the Swedish government agency for radio communications posts
       | some riddles every year around Christmas. With one you got a
       | couple of phone call logs and were asked questions about who was
       | who in a terrorist group.
       | 
       | Plotted the calls with graphviz and the questions were instantly
       | trivial to solve. Great tool with many applications.
        
       | phkahler wrote:
       | Always wanted a way to (have GCC?) send a call graph to graphviz.
       | A reduced version indicating calls across files would also be
       | useful.
       | 
       | I get that polymorphism can mess that up, so maybe just link
       | callers to the base class in those cases.
        
         | leni536 wrote:
         | I remember being able to set that up with clang (obviously not
         | indirect calls).
        
       | bhaak wrote:
       | The history and majors relationships between NetHack and its
       | forks are visualized with graphviz.
       | 
       | https://nethackwiki.com/wiki/Variant
        
       | nsajko wrote:
       | A fast interactive 3D alternative for visualizing large graphs is
       | Graphia: https://github.com/graphia-app/graphia
       | https://graphia.app However, it's currently suffering from the Qt
       | switch from 5 to 6.
       | 
       | Regarding Graphviz itself, I wonder why is there no special
       | layout logic for planar graphs? They can be recognized and
       | embedded on the plane in linear time without intersecting edges,
       | so it would be very nice if some of the Graphviz tools actually
       | did that.
       | 
       | A recent set of minimal graph coloring Graphviz visualizations of
       | mine: https://gitlab.com/nsajko/example_optimally_colored_graphs
        
       | tandav wrote:
       | btw python wrapper is awesome:
       | 
       | https://graphviz.readthedocs.io
        
         | erwincoumans wrote:
         | Look nice a simple! Minor nit: I wish they could have added an
         | option to statically link graphviz/dot, so the pip install
         | became fully self contained.
        
       | franga2000 wrote:
       | The biggest thing that makes me keep going back to graphviz
       | despite there being nicer libraries available is that because it
       | uses a really simple markup language instead of code or complex
       | objects, I can juts put a handful of print/write statements into
       | any program I want to analyse and pipe it to graphviz to give me
       | nice graphical overview of what's going where.
       | 
       | I've used it to visualise/debug everything from web scrapers in
       | Python to directory scanning in Bash to proper graph algorithms
       | in Java. Every time with no library installation or anything,
       | just simple prints to a stream/file and perhaps a system() call
       | at the end if I'm running it often enough.
        
       | l0b0 wrote:
       | Graphviz is one of my favourite tools, but I use it very rarely.
       | I noticed a mention of support for UTF-8 and some great
       | documentation layout improvements, but what are the other big
       | features that have been implemented in the last few years?
        
       | _joel wrote:
       | It's great to see it still going. Used it for Puppet as well as
       | dpkg output (we made a full dependency list of our multimedia
       | ingest application, i.e. lots of custom ffmpeg and libboost etc).
       | That thing was _huge_
        
       | nyellin wrote:
       | Here are some cool things I've done recently with graphviz:
       | 
       | 1. Draw "sketch" style graphs using https://sketchviz.com/new
       | 
       | 2. Draw graphs of memory usage in golang programs (using pprof):
       | https://graphviz.org/Gallery/directed/pprof.html
       | 
       | 3. Embed graphviz into Sphinx docs (shameless self-promotion:
       | https://docs.robusta.dev/master/catalog/triggers/index.html#...)
        
         | taubek wrote:
         | I like the output of Sketchviz. Do yo know if it is possible do
         | make such output directly from desktop app?
        
           | nyellin wrote:
           | Sadly I haven't found a way. Let me know if you do
        
             | taubek wrote:
             | Will do.
        
           | fsiefken wrote:
           | you can install it locally with docker
           | https://github.com/iamacarpet/sketchviz-docker
        
             | taubek wrote:
             | Thanks! Docker makes my computer so slow... And it would
             | probably be an over kill for me. But it is nice to know
             | that it exists.
        
         | erwincoumans wrote:
         | Sketchviz look great. Is there an option to export vector
         | graphics (for example svg)?
        
           | cldellow wrote:
           | If you hold down control, the "Download PNG" button becomes
           | "Download SVG".
           | 
           | Super intuitive, I know! :)
        
             | erwincoumans wrote:
             | Haha, why is that feature hidden? Like the latest Tesla
             | Model 3 v11 update hides many features :-)
        
         | IAmEveryone wrote:
         | I once created a dataset of X-hooked-up-with-Y for my circle of
         | friends. About 50 nodes and a few hundred connections (after I
         | asked around a bit for additions).
         | 
         | It became a wedding present for one rather central "node" with
         | the title "drosophila neural regulation network" or something
         | like it. No names, just lines and circles. It's still the
         | centerpiece in his home office.
        
         | erwincoumans wrote:
         | Very cool. About Sketchviz
         | 
         | 1) is there an option to make the graph horizontal instead of
         | vertical? 2) can you make the svg option separate, instead of
         | hidden behind the PNG button (with CTRL key)? 3) how did you do
         | the handwriting style?
        
           | hun-nemethpeter wrote:
           | Yes, the name of this attribute is rankdir.
           | 
           | See in the docs: https://graphviz.org/docs/attrs/rankdir/
           | 
           | In the sketch example:                 digraph G {
           | rankdir="LR";         graph [fontname = "Handlee"];
           | ...
        
         | rajandatta wrote:
         | My single biggest issue with Graphic is that the quality of
         | Arrow end-points is very poor. They don't terminate cleanly at
         | the destination. This is visible in the 2nd link you've posted.
         | 
         | I'm amazed that this hasn't been addressed. It's been there for
         | years.
         | 
         | Makes the end products impracticable for distribution in a
         | professional setting. It's Ok if you're the only consumer ...
         | not great for other cases.
        
           | feanaro wrote:
           | I remember this issue being raised, I think on the graphviz
           | Discourse, and the graphviz developers responding to it as if
           | it was a hard to solve limitation of graphviz for some
           | reason. But I can't for the life of me remember the details.
        
             | pphysch wrote:
             | Ostensibly each arrow style graphic would need an
             | explicitly-defined "attach point" at whatever is deemed the
             | "tip", so that the tip can be oriented perfectly in
             | relation to the vertex and edge of the GraphViz graph.
             | 
             | If nothing like that exists, I can see how it would be a
             | very troublesome refactor.
        
               | [deleted]
        
               | graphviz wrote:
               | Oh, that too. Feature interaction is a killer, isn't it.
        
             | graphviz wrote:
             | "Very poor" seems harsh, but, yes, it hurts us, too. (That,
             | and text with slightly-off baselines.)
             | 
             | The relevant code starts around https://gitlab.com/graphviz
             | /graphviz/-/blob/main/lib/common/... If this isn't right,
             | maybe somebody can figure out why. Perhaps the loop stops
             | sometimes on the wrong side of the boundary? Anyway, it's
             | equally possible that when the endpoint coord is handed off
             | to a lower level driver, the arrowhead mitering is wrong.
             | There is no question there was once upon time explicit code
             | to try to cope with this problem, at least in the native
             | PSgen, but I can't find it now. Maybe it wore away as waves
             | of open source development washed over it, along with
             | static tables for a bunch of "standard" PS fonts.
             | 
             | For more background, see for example
             | https://developer.mozilla.org/en-
             | US/docs/Web/SVG/Attribute/s...
             | 
             | In the worst case, this has to be debugged for all the
             | drivers in
             | https://gitlab.com/graphviz/graphviz/-/tree/main/plugin
             | 
             | No doubt there are more details if anyone can remember
             | them.
        
       | AceJohnny2 wrote:
       | The `gvpr` tool in graphviz deserves more recognition.
       | 
       | Graphviz, at its core, is a simple graph description language
       | (DOT), which allows _progressive enhancement_ , and a bunch of
       | auto-layout tools where some double as renderers.
       | 
       | The double-duty of the layout/renderers masks GraphViz's true
       | power, which is that you can create a pipeline modifying your
       | graph source (confusingly referred to as '.dot' files),
       | progressively adding attributes.
       | 
       | This is where gvpr comes in. While most are familiar with GV's
       | all-in-one layout+rendering tools like `dot` or `neato`, gvpr is
       | a generic Awk-like programming tool that iterates over nodes and
       | edges. With it, you can implement any layout algorithm you like
       | (or not!), to specify part or all of the attributes of your graph
       | (like positioning and style), to then be rendered using `dot` to
       | the format of your choice.
        
         | AceJohnny2 wrote:
         | I'm actually disappointed that `gvpr` isn't mentioned at all on
         | GraphViz's main page, because I think it's its most powerful
         | tool. All I could find are manpages, and not even on GraphViz's
         | own website!
         | 
         | https://manpages.debian.org/testing/graphviz/gvpr.1.en.html
        
           | steveroush wrote:
           | I second the GVPR praise. Pretty powerful.
        
       | mLuby wrote:
       | GraphViz is great, like Markdown. I recommend https://edotor.net
       | for online use:                 1. No set-up, no
       | accounts/registration.            2. Free, no ads.            3.
       | Simple, pleasant UI with variable/keyword autocompletion and even
       | multi-cursor find/replace!            4. Your graph is saved in
       | the URL so sharing the link lets others play with a copy of your
       | graph. I usually link-shorten the URLs since they're long:
       | 
       | https://bit.ly/edotor-example-1 https://bit.ly/edotor-example-2
        
       | janto wrote:
       | https://plantuml.com graphs look much better
        
         | rwoerz wrote:
         | PlantUML depends on GraphViz (https://plantuml.com/en/graphviz-
         | dot)
        
       | mdtrooper wrote:
       | Graphviz is another "heart bleed" / "log4j" / ...
       | 
       | Because a lot of big companies use it (and they spend 0 EUR/$/...
       | in the project), and it is broken from several years...
        
         | _joel wrote:
         | I'm failing to see a vector here?
        
         | lloydatkinson wrote:
         | Broken how?
        
         | graphviz wrote:
         | Author(s) here
         | 
         | We do voluntarily act on CERT advisories.
         | 
         | But, true.
        
       | ggerganov wrote:
       | For the ASCII lovers, I made this simple web page to help convert
       | dot to text diagrams:
       | 
       | https://dot-to-ascii.ggerganov.com
       | 
       | It's useful to embed diagrams directly in source code for
       | example.
       | 
       | Here is a sample [0]:                                    0.6
       | +-------------------------+                      V
       | |       +---+  0.8   +---+  0.1   +---+  0.7   +---+  0.2   +---+
       | | d | -----> |   | <----- | e | -----> | a | -----> | b |
       | +---+        | c |        +---+        +---+        +---+
       | |   |  0.4                               |                    |
       | | <----------------------------------+                    +---+
       | 
       | And a more complex example from a project of mine [1]:
       | +-------------+       | @tweet2doom |       |             |
       | |    ROOT     | <-----+       +-------------+       |         ^
       | |         |                   |         |                   |
       | +-------------+     +-----------------+       |  @player1   |
       | |    @player2     |       |             |     |                 |
       | | /play 50-u  |     | /play 30-l,50-f |       +-------------+
       | +-----------------+         ^                   ^         |
       | |         |                   |       +-------------+
       | +-----------------+       | @tweet2doom |     |   @tweet2doom   |
       | |             |     |                 |       |    Video    |
       | |      Video      |       |             |     |                 |
       | |  Start: 1   |     |    Start: 1     |       |   End:50    |
       | |     End:80      |       +-------------+     +-----------------+
       | ^                             |                             |
       | +-------------+     +-----------------+       | @tweet2doom |
       | |                 |       |             |     |    @player2     |
       | |    Video    |     |                 |       |             |
       | |   /play 30-l    |       |  Start: 80  |     |                 |
       | |   End:110   | --> |                 |       +-------------+
       | +-----------------+
       | 
       | [0] https://dot-to-ascii.ggerganov.com/?src_hash=476410d3
       | 
       | [1] https://dot-to-ascii.ggerganov.com/?src_hash=1ee7dcfe
        
         | cjlm wrote:
         | I love this and wrote about it in my newsletter on network
         | thinking [0] - thank you!
         | 
         | [0] https://sourcetarget.email/editions/17/
        
         | Godel_unicode wrote:
         | If you're on mobile you're going to want to rotate your phone.
        
         | benreesman wrote:
         | This is so friggin cool.
         | 
         | I would kill to have this as like a Python library or
         | something, any chance you'd open-source it?
         | 
         | Or is there a GitHub link already and I overlooked it?
         | 
         | Either way great job.
        
         | tptacek wrote:
         | This is fantastic.
        
       | karlicoss wrote:
       | Graphviz is awesome!
       | 
       | Here are a couple of my diagrams:
       | 
       | https://beepb00p.xyz/blog-graph.html -- graph of my blog pages
       | with tags/connections between posts, generated with a DSL-ish
       | python script
       | https://github.com/karlicoss/beepb00p/blob/master/misc/index...
       | 
       | https://beepb00p.xyz/myinfra.html -- map of my personal data &
       | infrastructure (discussed a year ago
       | https://news.ycombinator.com/item?id=26269832 ). Also a similar
       | DSL https://github.com/karlicoss/myinfra/blob/master/generate.py
       | 
       | The main downside for me is that sometimes it gets the
       | positioning wrong, and you can see how it can be easily fixed,
       | but it's hard to convince graphviz to actually do so. Basically
       | I'd love a tool where I can do 10% of positioning manually and
       | let the rest be constraint based like in graphviz.
        
         | taeric wrote:
         | It used to have a built in tool to move nodes it has placed.
         | All I can find scanning the docs right now is the -n flag to
         | neato, which will honor existing pos fields.
         | 
         | Edit: dotty is what I was trying to remember.
        
       | dylanowen wrote:
       | Graphviz is one of my favorite tools. I use it for most of my
       | diagraming https://github.com/dylanowen/mdbook-graphviz and I use
       | it as debugging output when I'm working through graph problems.
        
         | Thiez wrote:
         | Likewise! I have used it to easily visualize dependency graphs
         | at multiple employers. The pictures can get a bit messy when
         | they're very large, but they were amazing for detecting
         | incorrect/missing dependencies.
        
       | dang wrote:
       | Past related threads:
       | 
       |  _How Graphviz thinks the USA is laid out_ -
       | https://news.ycombinator.com/item?id=25611053 - Jan 2021 (80
       | comments)
       | 
       |  _Create diagrams with code using Graphviz_ -
       | https://news.ycombinator.com/item?id=23475225 - June 2020 (211
       | comments)
       | 
       |  _Graphviz - Graph Visualization Software_ -
       | https://news.ycombinator.com/item?id=18797932 - Dec 2018 (3
       | comments)
       | 
       |  _Show HN: Project Management as Code with Graphviz_ -
       | https://news.ycombinator.com/item?id=15950325 - Dec 2017 (64
       | comments)
       | 
       |  _A Quick Introduction to Graphviz_ -
       | https://news.ycombinator.com/item?id=15324883 - Sept 2017 (44
       | comments)
       | 
       |  _A Technique for Drawing Directed Graphs (1993) [pdf]_ -
       | https://news.ycombinator.com/item?id=14568180 - June 2017 (11
       | comments)
       | 
       |  _What happened to GraphViz?_ -
       | https://news.ycombinator.com/item?id=11265188 - March 2016 (2
       | comments)
       | 
       |  _Ask HN: What is your favorite application of Graphviz?_ -
       | https://news.ycombinator.com/item?id=790668 - Aug 2009 (8
       | comments)
       | 
       | There have been others, of course, but these seem to be the ones
       | most focused on Graphviz itself.
        
       | aaronax wrote:
       | Graphviz was excellent for documenting my sailboat's electrical,
       | plumbing, and data networks:
       | https://github.com/aaronaxvig/hunter-376-docs
       | 
       | Odds are slim that its future owner will have the skills to work
       | with such a resource. But I did leave a couple printouts on the
       | boat before leaving it!
        
       | srinathkrishna wrote:
       | I've long marveled on of my ex-colleagues graphviz-fu. He'd whip
       | out a new graphviz online doc and explain an architecture through
       | it. Helped a ton during the pandemic as we were all remote.
        
       | graphviz wrote:
       | Author(s) here. Ask us anything.
        
       | dzyanis wrote:
       | I used it for visualization on my project
       | https://github.com/srce/roadmap/blob/master/stacks/java/data...
       | 
       |  _.XML - > Python script -> _.DOT -> Graphviz -> *.SVG
       | 
       | It's very useful and probably the best example of using DOT
       | language, unfortunately.
        
       | steveroush wrote:
       | If you have Graphviz "how do I do..." questions, try the forum
       | (https://forum.graphviz.org/) or stackoverflow
       | (https://stackoverflow.com/). If you have bug fix or enhancement
       | requests, try
       | https://gitlab.com/graphviz/graphviz/-/issues?scope=all&stat...
        
       | erwincoumans wrote:
       | I love the Doxygen dependency graphs, using dot/Graphviz. Wow,
       | 1999, 23 years old, like the first Matrix movie...
        
       | jonstewart wrote:
       | My team uses a succinct graphviz dot file to note the
       | dependencies between different git repositories. This is then
       | used by the build system to figure out what needs to be rebuilt.
       | There are lots of other ways to skin this cat, this is just the
       | method we chose, and it's oddly pleasing.
        
       | undershirt wrote:
       | Did anyone see the new pathing algorithm for connecting graph
       | nodes that made some rounds on twitter? It looked way better than
       | a normal force-directed graph. I can't remember what it was
       | exactly, and have lost the reference, but it was a side effect of
       | solving what looked like a traffic problem.
        
         | inciampati wrote:
         | Stochastic gradient descent optimization of the layout based on
         | distances in walks in the graph?
        
       | pydry wrote:
       | Anybody know what the best visual editor is? Web or desktop.
        
         | skewbone wrote:
         | Graphviz ships with a tool called dotty that can be used for
         | visual graph editing. It's a bit cumbersome but does work.
         | 
         | https://www.graphviz.org/pdf/dottyguide.pdf
         | 
         | Edit: I don't know of a really good visual tool as I've found
         | text editing .dot files directly with a live visualization
         | pretty nice. I use graphviz pretty regularly.
        
       | omegote wrote:
       | I've used Graphviz for many years and my main gripe with it is
       | the lack of customization. Yes, there's "some" customization, but
       | there's a point (not too far from the initial style) where, if
       | you don't like the output, you're out of luck and might as well
       | redraw it using draw.io or some other WYSIWYG editor.
        
         | lmeyerov wrote:
         | Graph viz is admirably powerful, even here. The main techniques
         | seem to be invisible objects and custom code, in case that
         | helps. The cassowary solver group in Australia (I'm blanking on
         | the university, Monash?) goes further via custom constraint
         | logic, and I believe iOS layouts were deeply inspired, and
         | maybe even had one of their students.
         | 
         | Graph technologies are tricky to build up -- you can go deep in
         | many areas like this. Afaict, AT&T/Bell Research used to be the
         | main developers of graphviz, and when that corporate lab
         | thinned out, so did graph viz development. A similar story
         | happened with gephi devs when they left their universities (was
         | popular in social data), and cytoscape (popular in bio) is
         | still largely at that fragile state.
         | 
         | We are historically big contributors to OSS at Graphistry, but
         | saw the history of funding issues in this space, and how each
         | tool reached a frustratingly low ceiling due to it. We decided
         | to not start as open core, and instead made a free GPU tier +
         | release individual pieces as OSS (Apache Arrow's JS tier, etc)
         | + initially charge for GPU code, until we could build + grow
         | more commercially targeted parts. Thankfully, we are getting to
         | the point of enough sustainable revenue that we are pushing
         | much more to our OSS libs now, and one of our OSS pushes for
         | 2022 will be moving custom (GPU-accelerated) traditional
         | layouts & AI layouts to the OSS lib pygraphistry :) A request
         | we get often get for pygraphistry and our file uploader UI is
         | dotfile (and graphml/gexf) conversion/ingest for then
         | viewing+editing in our scalable interactive graph renderer, so
         | we have been thinking of adding a pygraphistry example just to
         | demonstrate the OSS flow!
        
       | technimad wrote:
       | Many moons ago I created all graphs in the LPIC2 exam prep book
       | [1] using graphviz. The book is open sourced now, and all dot
       | files are preserved in the accompanying repo [2].
       | 
       | One thing I learned creating these graphs was that with some
       | tinkering you have quite a lot of control on how the result will
       | look, without littering the semantic in the source file with a
       | lot of markup.
       | 
       | I choose graphviz because the dot notation can easily be checked
       | into source control. It is also easy to create reproducible
       | results using a makefile.
       | 
       | [1] https://lpic2book.github.io/src/
       | 
       | [2] https://github.com/lpic2book/src/tree/main/docs/images
        
       | GuB-42 wrote:
       | One of my favorite applications of graphviz
       | https://anidb.net/anime/715/relation/graph
       | 
       | It is a great tool to have, it makes drawing complex diagrams
       | manageable.
        
       | tokumei wrote:
       | Graphviz has really helped me in the past with troubleshooting
       | giant CMake projects with lots of dependencies.
        
       | graderjs wrote:
       | I used Graphviz years ago to generate diagrams for NLP
       | structures, and other visualizations. It was the only thing that
       | could do what I needed. I ended up moving to Processing/P5 to
       | create "spring physics" interactive graphs, then wrote my own
       | eigenvector embedding visualization that could project into 3D
       | space and had a moveable camera so you could fly around with WASD
       | and mouse. Cool stuff! Graph visualization and 3d graphics was a
       | fun rabbit hole
        
         | happylion0801 wrote:
         | Do you happen to have any open source code for this that I
         | could look at. I am looking to do some interactive graph viz
         | and would love to see if there is something I could reference
        
           | graderjs wrote:
           | Sure. Let me look it up. It should be all here, at my
           | OpenProcessing (at least all the code I wrote for myself
           | personally):
           | 
           | https://openprocessing.org/user/15252?view=sketches
           | 
           | Basically any sketch that has "3d" or "aspekt" in the title
           | is on that track. But you can also see from the thumbnail
           | many of them are 3d world related. The navigation of that
           | site is pretty tricky...but you can find the source code by:
           | 
           | - Click on a sketch
           | 
           | - Click on the 'abacus' control menu to the right
           | 
           | - Click on the files tab in that
           | 
           | Source code in Java should be available there.
           | 
           | Please remember it requires a version of Processing in Java
           | to work. I worked on this in 2011/2012 so you may need to
           | figure out which Processing version that is.
           | 
           | Also, here's a youtube video of flying around one of my
           | sketches:
           | 
           | https://www.youtube.com/watch?v=lNshrYO7Kf4
           | 
           | and here are some more videos:
           | 
           | https://www.youtube.com/channel/UCw-6wNeif6-l7oqippdORcw
        
             | happylion0801 wrote:
             | Thank you, those look really nice, appreciate the links :).
             | I have used processing before so atleast some of it should
             | be familiar.
        
       | tepitoperrito wrote:
       | If you use Django, installing django-extensions[0] will add a
       | management command to produce a "dot" file for the apps/models of
       | your choice[1].
       | 
       | It's pretty handy to get a rough overview of a new project or to
       | use in docs.
       | 
       | [0] https://github.com/django-extensions/django-extensions
       | 
       | [1] https://django-
       | extensions.readthedocs.io/en/latest/graph_mod...
       | 
       | Edit: typo
        
       | dddddaviddddd wrote:
       | Graphviz made it really easy for me to plot dependencies in Go
       | data structures! After I put together a lexer, Graphviz took care
       | of all the difficult work of making sense of the data:
       | https://github.com/davidschlachter/embedded-struct-visualize...
        
       | indentit wrote:
       | I've never been that happy with the output from any of the
       | different graphviz engines. I'd like to see a UI graph editing
       | tool which can import and export .dot format, but also allows
       | manually moving nodes (which I guess wouldn't get exported unless
       | arbitrary metadata is supported), and ofc exports to svg. Maybe
       | there's already something similar I haven't stumbled across yet?
       | 
       | I guess my use case is mainly swimlanes and places where nodes
       | don't have to have the same rank.
        
         | steveroush wrote:
         | Look at the group attribute, it can help with vertical (off-
         | rank) alignment
        
         | nyellin wrote:
         | Totally agree with this. I always want to start with graphviz
         | but then modify the output afterwards to fix the layout
        
           | taeric wrote:
           | I mentioned this in another thread. You can have the output
           | be a dot file. Which you can then edit and send back with a
           | flag to not redo the layout.
        
             | nyellin wrote:
             | That's a wonderful tip, thank you!
        
               | taeric wrote:
               | Hope it helps! There used to be a program called dotty,
               | looks like it was basically abandoned, though. :(
        
       | AtNightWeCode wrote:
       | A true classic! Powerful, yet very easy to learn.
        
       | motohagiography wrote:
       | Graphviz is an amazing tool, it has just suffered from being
       | cloistered to technologists whose jobs aren't to solve the kinds
       | of problems it is specifically adapted for. I use graphs in
       | security and privacy quite a bit, and even built the tech for a
       | hopeful security platform using a graph back end. They yield the
       | fastest path through complex problems, and I use them to do in a
       | couple of hours what typically would take client staff months.
       | 
       | They're really compelling but oddly unpopular.
       | 
       | Imo, they're useful for one-off pattern discovery, and they're
       | most valuable for finding single or a few exceptions and outliers
       | in normalized data, and you need to be in an environment where
       | there are asymmetric returns on finding those. Surveillance seems
       | to be their default use case, with open ended scientific research
       | a close second. This comes up with graph based recommendation
       | engines, which are essentially a surveillance/marketing product
       | based on preferences. Most businesses aren't based on discovery
       | of anything other than customers for a transaction they already
       | have.
       | 
       | These aren't problems engineers typically solve, which are more
       | about scaling and optimizing, they're more marketing and sales
       | problems, where you're looking for exceptions and opportunities.
       | (security and privacy are the complementary antithesis of these)
       | A graph based product (imo) is ideal for product marketing
       | analysts optimizing for customer preferences and discovery.
       | 
       | From a product perspective, graphs are analogous to ML, where
       | you'd use a clustering algorithm on loosely structured data to
       | yield categories, comparisons, and implied relationships, whereas
       | a graph yields the same thing over the structured normalized data
       | you can feed into it once you have imagined an ontology to fit
       | it.
        
         | lizen_one wrote:
         | That sounds really interesting! Can you give a few more details
         | how you use Graphviz? How does it give such a great advantage
         | "to do in a couple of hours what typically would take client
         | staff months."
         | 
         | Did I understand it correctly that you use it to discover
         | patterns? Are these patterns discovered by just using the
         | layout engines? Arent' other tools, e.g. networkx in Python or
         | cytoscape in javascript easier to use interactively in a REPL?
         | What is the typical workflow (maybe plot, find interesting
         | pattern, change query/data in a loop)?
         | 
         | I'm really interested in how Graphviz can be so great. I am
         | currently working with the other mentioned tools for
         | visualization purposes.
        
           | motohagiography wrote:
           | Really simply, I typically use Neo4j, but if I have flat
           | homegenous data, I just use Graphviz because the dot markup
           | format lends itself to parsing easily in awk command lines.
           | The times I have used networkx was when I needed a graph
           | abstraction layer to reason about another graph query, so
           | networkx wasn't used as a persistent graph store, but more of
           | an intermediate data structure for orchestrating multiple
           | service and api calls, like a low rent graphql. I'm a crap
           | developer, but the graphs were what i needed to piece the
           | logic together coherently.
           | 
           | One example of clients taking months is mapping
           | counterparties to agreements. Let's say you have inherited a
           | division that has file share full of contracts and you want
           | to understand the line of business. You get the
           | counterparties out of the contracts and find all the paths
           | for obligations between entities within the division and
           | their counterparties. The graphviz/dot layout gives you a map
           | of all those parties in a single slide and shows clusters,
           | instead of a 3 lb. document with a paragraph for each of them
           | that would have cost a massive amount of consulting time, or
           | interviewing several people to get their narrative
           | understanding of how the business worked, the graph provides
           | an objective map. You could just use D3js, but for me the dot
           | markup was faster on the command line than structuring json.
           | 
           | The idea is if you can formulate a conceptual, narrative
           | ontology of an organization, you can create a grammar of
           | things and relationships, and then you can plug data
           | (contract counterparties) into that model and form a fairly
           | complete map.
           | 
           | Another recent use case was enterprise vulnerability scan
           | data over a very full /16 address block, allocated across
           | multiple divisions under different management hierarchies
           | with thousands of hosts. By linking the host ownership data
           | to projects and an org chart with the types of
           | vulnerabilities, I could demonstrate in a couple of slides
           | what the highest impact patching strategy would be. Again,
           | graphviz for sketching up the ontology, then Neo to do the
           | lifting.
           | 
           | On a much simpler scale that was more graphviz/dot oriented,
           | I did some work for a startup where I worked with the
           | executive team who had acquired a codebase and talent, and
           | created an ontology of their pipeline customers, their stated
           | needs, implied product features, platform dependencies, our
           | service interfaces, their code bases, and demonstrated the
           | flow of how work on the code bases flowed through to impact
           | revenue. This ultimately got represented as a Sankey diagram,
           | but it was graphviz/dot I used to sketch up the initial
           | ontology.
        
             | jcims wrote:
             | Have you tried gephi? It's not exactly an alternative to
             | graphviz (eg. you can't cluster nodes) but it handles much
             | larger graphs and has a bit more flexibility in layout. It
             | has plugins for both dot and neo4j input.
             | 
             | Graphs and infosec go very well together.
        
         | SavantIdiot wrote:
         | I found the learning curve to be quite steep with few examples
         | of graphs that looked well-designed. By default, large graphs
         | look like crap because engineers designed it, not designers (it
         | takes both!).
         | 
         | However, that was back in the late 90's. Now the internet has
         | many examples of better looking layouts, but it is still
         | disappointing that they don't look ... designed?
         | 
         | But integration and automation are great. Like GNUPlot, which
         | I've used for decades because it is so easy to automate once
         | you learn how to make plots look better than the default.
         | 
         | GStreamer uses DOT output by default. But any reasonably sized
         | pipeline is almost impossible to read without excessive
         | zooming. But it gets the job done.
        
       | soheil wrote:
       | At what point does one say maybe a static svg isn't the right way
       | to display that much complexity [0]?
       | 
       | [0] https://graphviz.org/Gallery/twopi/twopi2.svg
        
       | mbostock wrote:
       | I love Graphviz! It's in the Observable standard library as the
       | dot tagged template literal, powered by Viz.js.
       | 
       | https://observablehq.com/@observablehq/dot
       | 
       | Here's a recent example where I used it to figure out why certain
       | dependencies are in my node_modules:
       | 
       | https://twitter.com/mbostock/status/1479693504511053824
        
         | jahewson wrote:
         | Is there a fork of viz.js that's still maintained? The original
         | was abandoned in 2018.
        
           | JohnHaugeland wrote:
           | no.
           | 
           | two steps above the abandoned version, before the web threads
           | attempt, works quite nicely.
        
             | funstuff007 wrote:
             | two commits previous or two releases previous to final
             | version?
        
       | shiryel wrote:
       | I love using Graphviz to document projects, because its just a
       | text file that I can keep with the project on git.
       | 
       | I also used it to make a small tool to generate the relationships
       | of Elixir's modules: https://github.com/shiryel/graphme
        
       ___________________________________________________________________
       (page generated 2022-01-17 23:00 UTC)