[Tex/LaTex] How to create Ishikawa (fishbone) diagrams with LaTeX

diagramsgraphs

Is there an automated way or a "template" to create Ishikawa (also called "fishone") diagrams with LaTeX?

They are used e. g. to show the factors influencing a process and have a hiearchical structure:

  • the horizontal main line is the process itself
  • the big branches show the main factors
  • and they can be detailed further to show the factors which influence or "compose" the main factors

For the usage:

  • it would be great if the layout (distributing the branches equally) could be done more or less automatically

Example from wikipedia (http://en.wikipedia.org/wiki/Ishikawa_diagram):

example

(link to google search result for more "inspiring" examples, to see how such diagrams can look like and how they are used)

Best Answer

TikZ trees would probably be the way to go. However, things get pretty hairy fairly early on (example in Plain w/ XeTeX):

\input tikz
\font\figfont="Myriad Pro" at 8pt
\font\tinyfigfont="Myriad Pro" at 6pt
\usetikzlibrary{trees,shapes.geometric}
\tikzpicture[>=latex,font=\figfont,lbl/.style={draw=black,very thin,fill=#1,ellipse}]
  \coordinate
    child [grow=right] {
      child {
        child [grow=125] {
          child [grow=left] {node {\tinyfigfont Cost of Transport} edge from parent[<-,thin]}
          child {
            child [grow=left] {node {\tinyfigfont Access to premises} edge from parent[<-,thin]}
            child {node [lbl=yellow!20] {Transport}}
            child [missing]
          }
          child [missing] edge from parent[<-,thick]
        }
        child [xshift=1cm] {
          child [grow=125] {
            child [grow=left] {node {\tinyfigfont Security} edge from parent[<-,thin]}
            child {node [lbl=green!20!yellow] {Premises}}
            child [missing] edge from parent[<-,thick]
          }
          child
          child [grow=-125]
        }
        child [grow=-125] {
          child [grow=left] {node {\tinyfigfont Consultation} edge from parent[<-,thin]}
          child {node [lbl=purple!20] {Clients}}
          child [missing] edge from parent[<-,thick]
        }
      }
    };
\endtikzpicture
\bye

enter image description here

This could be improved upon a lot, but hopefully I could give you some idea.

Related Question