Drawing lattices I would like to be able to draw the lattices of subgroups of certain groups. I thought it would be easy when I already know the structure, but I've never done it before, and it turns out it's harder than it seems. Are there any good ways of making the picture as readable as possible? 
Let's say I want to draw the lattice of subgroups of $G=\Bbb Z/1176\ \Bbb Z.$ I have $1176=2^3\cdot 3\cdot 7^2$ so there are $(3+1)\cdot(1+1)\cdot(2+1)=24$ subgroups of $G$, each generated by one of the $24$ divisors of $1176.$ The largest is $\langle 1\rangle$, and immediately below it are $\langle 2\rangle$, $\langle 3\rangle$ and $\langle 7\rangle.$ This is easy to draw. But now it seems that I can't avoid a self-intersection of the graph below that. The next row should consist of $\langle 2^2\rangle,$ $\langle2\cdot3\rangle,$ $\langle3\cdot7\rangle,\ \langle2\cdot7\rangle$ and $\langle7^2\rangle.$ What is the best way to draw it? By best I mean most readable and tidy-looking.
Additionally, is there some kind of free software that would find the most readable way of drawing the lattice? 
 A: There are several ways how to define "nice" in this context.
For example, you can want your diagram to 


*

*Minimize number of edge intersections.

*Visualize the symmetry.

*Visualize the symmetry of closed intervals.

*Visualize the involutions.

*...invent your own here...


The problem is that the conditions contradict each other.
Even as simple poset as $2^{\{1,2,3\}}$ has three nice diagrams.
Usually, I order the elements by their (lower) rank; then I 
try to minimize the number of intersections;
then I try to preserve as much symmetry as possible. If the number of
elements is not too big, there is usually a reasonably nice picture.
Some software links:


*

*Sage can draw diagrams of posets

*A lattice drawing applet by Ralph Freese
A: This is more of an add-on to previous answers. I would comment, but I don't have enough reputation. 
In Sage, a simple script like this will generate the subgroup lattice of a group:
G = CyclicPermutationGroup(1176)
subgroups = G.subgroups()
P = Poset((subgroups, lambda h,k: h.is_subgroup(k)))
P.plot(label_elements=False)

In your case, it has a nice regular structure:

Can you see why any cyclic group of order $p^3 \cdot q^2 \cdot r$, for $p,q,r$ primes, will produce the same lattice?
All this is powered by Sage, which in turn uses many of the things that others have already mentioned:


*

*Groups (powered by GAP)

*Posets and their Hasse diagrams

*Plotting graphs (powered by Graphviz)


It doesn't always produced the nicest diagrams, but at least it lets you see quickly what the vertices and edges of the lattice should be. (I think the next release of Sage is supposed to have better graph plotting capabilities, producing graphs closer to what you have in mind).
If you're interested, I've also written a Sage interact script that allows you to generate subgroup lattices for groups of size up to 32: http://sheaves.github.io/Subgroup-Explorer/
