Making graph human friendly/readable (500 nodes, 1600 edges)

# First time posting, sorry if this is double-post! 
I have decided to lear DOT language, which looks fantastic. I decided to make a project for making a graph for RPM building. I scan all the recipes to build RPM packages and also add information about required patches and imports. Currently my graph has <500 nodes and >1600, and the size should be stable +/- 50-100 nodes/edges from time to time.
Here is what I have now:
* (sfdp)
* (dot) [fragment]
* (twopi)
First two a bit more readable then the last one.
* Packages are in black bordered boxes.
* Patches are in orange bordered boxes + orange edges.
* Imports are in red bordered boxes + red edges.
* There are no single root package node. We could say there are several top level (root) package nodes, 4-10 nodes packages (nodes), which import most of the packages.
* There are standalone package (nodes), not dependencies and no on depends upon them.
* Patches can be only (mostly) used by single package node.
* Not all packages nodes has patches. I would say smaller part of packages nodes have them.
* Import files can be included in a huge part of package nodes (e.g., 1/3 of all package nodes).
* I have rankdir="TB" (Top-Bottom)
* I have increased the weight on the edges (package -> patch). Which should mean that patch nodes are closer to their package node.
* I would be nice to minimize number of edges overlaying nodes. This makes grap a lot unreadable.
Any suggestions on grap layout configuration and algorithm usage in this case?
Thanks for the help!

Recent comments