Recs.
Updated
The Graphviz project is free and open-source and offers new contributors excellent opportunities to explore new concepts, or enhance tools that thousands of projects already use.
SpecsUpdate
Pros
Pro Infinitely flexible
The nice thing about figuring out how to use Graphviz to do anything is that you have a huge amount of control over generating potentially massive diagrams/graphs which can be processed by a wide range of tools.
(NOTE: I said "FIGURING OUT HOW TO.." -- not sure why it is even listed h.ere since there isn't any way to generate a diagram except by using the DOT language, which means you need to write a data base query or a transformation that can import class specifications, XSD, etc. There are several options for creating a diagram using graph modeling tools, and then applying the graphic UML2 convention, e.g. Gephi, Rocs, Hypercube. Just don't expect to right click on a canvas and select "create Class specification", LOL. )
Cons
Con Is infinitely flexible
You can make a huge range of well laid out (automatically, but there are ways to force this) graph diagrams, and one of those uses could be to apply the UML2 graphic conventions and create a picture of a UML model (but NOT a UML model--not that most of the tools on this list have the faintest notion of what a UML model is--they just are for drawing pictures. For which I am astounded that Dia isn't on here since it even has a default UML tool set and does a very nice job, esp. considering it isn't even a Qt based application! (Hardcore KDE/LXQt/UKUI user, I am)).
You have to write the model using the DOT language, which is pretty simple text based language to learn the basics. It is very rich, and it can be a challenge to not get lost in the complexity. There are libraries to generate DOT models from XML Schema (and there used to be a nice Eclipse based XML Schema tool for OpenHealth Tools, but that seems to have been lost to the sands of time), database schema, etc. It isn't that hard to create a SQL query to dump results of a query as DOT (sort of like we used to do for XML and JSON before MySQL/PostgreSQL had native functions). So you can define your classes, attributes, and associations in a table format (in a spreadsheet or text editor and then import it), which is great for really complex interaction diagrams, or other applications.
But, if you just want a great program to draw a picture, use Dia, DrawIO, even that awful LucidChart site/iPad app), Karbon, LibreOffice Draw, Microsoft Paint/Word/Excel, or do what I do and just take a photo of a dry-erase board--much faster than even using Notability on an iPad and they work exactly as well as other drawing programs.
If you need to do real-world UML2 modeling then you need to look to an Ellipse Modeling Framework based tool like the tabular class editor, or IBM's excellent RSA or Papyrus, use VisualParadigm (which I happen to think is very pretty, for a Java application, and very robust--you get what you pay for, which is to say, quite a bit) which has plug-ins for Eclipse, Netbeans, and other IDEs, or (another open source option missing from here) Netbeans has a very nice UML modeling framework. It looks like stock Java, but still works really well as a modeling tool.
It is really important for users to figure out if they just need pictures, need the ability to generate diagrams from data (in which case GraphViz and yEd really come to the front), or need to be able to create a real UML model (typically w/ XMI import/expert, code generation, generation of diagrams from code, and usually other similar capabilities like RDB (SQL DDL) design, ontology editing, XML/JSON Schema design) like Eclipse-based tools, Magic, Umbrello, VisualParadigm, etc. can do