Cacti has been around since 2004, and if you've read any of those "Top 5 network monitoring software" lists floating around it most likely included Cacti. Since Cacti has been around for well over a decade now, there is a vast (if not always thriving) community support for most issues that you run into. The software is also still actively being worked on, which is rare in a piece of free software that has been around for so long.
So what's so great about Cacti? It is infinitely customizable. If there is a MIB or SNMP OID for something Cacti can graph it. It's free.
Are you tired of the standard white background and green traffic graphs? Well with Cacti you can make those graphs black with yellow outlines, or red, or fuscia, or sky blue, or any internet color you want. You have the options to make the graphs wider, shorter, taller, skinnier, include 20 data points or a single data point. The customization options are almost limitless.
If you can pull data off of a device via SNMP, then cacti can graph it. You are also not limited to graphs, pulling integers and displaying them as text is there. I personally have even used Cacti to graph voltage off of batteries and temperature readings off of a remote sensor. Cacti is well known for network interface statistics but it doesn't stop there.
There is typically no better cost than free. Being free though does come with some drawbacks, which are made fully aware when you look at the downsides.
So you want the customization beyond network interface graphing? Get ready to spend hours searching the forums hoping that someone else has figured out how to get the information that you are trying to get. That is exactly what I had to do when looking at how to graph information from that battery and temperature sensor. While Cacti has an amazing amount of customization options the flip side is that it requires a large amount of man hours to get it working the way you want. I don't know how many hours I spent customizing the system to just get information from Ubiquiti devices.
When I started using Cacti, I needed a system that would monitor network traffic. It did that fantastically well, it only started to become a pain point when I started to move outside of the network graphing.
There are other systems out there that allow you to monitor networking equipment (LibrNMS, PRTG) but none of them give you the granularity of control in graphing anything and everything that Cacti does.