The single responsibility principle doesn't force you to have classes with only one public method. It just states that a class should do one thing, and it should do it well.
For example, a
GraphNode could contain public functions to print a description, to rename the node or to rearrange it within its canvas... However, everything related to the edges would be better placed in its own
GraphEdge class, even though it might seems that a "few additional edge methods shouldn't disturb anyone."
Another good indicator for classes that commonly violate the SRP are
ABCManagers classes which oftentimes implement a bunch of different methods that are only remotely related to each other. In most cases, these methods should be re-factored and belong to a specific class, (or a new classes) depending on the scenario.
However, I believe that all patterns, principles and best practices should always be taken with a grain of salt. Although they are unbelievably helpful, blindly applying them without using common sense might do you more harm than good.