See EdwardTufte - one of the widely recognized masters of this field.
See also VisualizeTheWiki.
I'm fiddling with this stuff at the moment. In JavaLanguage, the artifacts are
The types of relationships are
And that's about it, for Java. The different types of relationships are part of the problem of why visualization is awkward; they each form an important hierarchy often orthogonal to the others. You need six-dimensional space to lay it out properly.
Either that or a way to filter what you see at any given time. One of the reasons why I like TableOrientedProgramming is that one's view of information can depend on ad-hoc queries rather than the original layout that the original programmer had in mind. Views of tables help me "visualize" patterns because I can control what they are showing me at any given time. I don't know if there is any analogous VisualQueryLanguage though.