Hi,
Usually all you need to do is to reduce the value of the SpringLength.
You can do that for all springs (links) by setting ForceDirectedLayout.DefaultSpringLength.
Or you can do that for individual edges by overriding SpringLength or setting ForceDirectedEdge.Length.
However, depending on the counter-acting forces, there is a limit to how much decreasing the spring length will allow the nodes to get closer to each other. You mention increasing the ElectricalCharge – that will just make it harder to allow nodes to get closer to each other. And since electrical fields vary by the (inverse) square of the distance while spring forces vary linearly, the electrical charge values will dominate when the distances get short.
Electrical forces are meant to apply to all nodes, even if “unrelated” by links.
Spring forces only apply to nodes when connected by a link.
Making springs too stiff does cause “jitteriness” because it reduces the “give” so the system cannot “relax”. Any little change forces movements in all of the connected nodes.
How large are your nodes? Do you have really large nodes that you want to position relatively close to each other? I can see how that kind of situation would not be achieved very well if you want to avoid node overlaps.
Our nodes are quite normal size. (two lines of 30 characters)
Gravitational force is normally a constant in one direction regardless of position. But you could override the GravitationalFieldX and GravitationalFieldY methods to make it non-uniform. Still, I don’t think it can help you with this particular issue.
If you don’t set any properties (or override any methods) and then decrease the SpringLength, don’t you see that the nodes get closer together? However, as I said, how close the nodes can be together is limited by the electrical charge. Try reducing that value too, and the nodes should be noticeably closer.