Users can build charts in our app, and there's a problem: the points can overlap and sometimes they hide each other. I'd like to find a way to:

  1. At least make sure user understands there is more than 1 point there
  2. Select points underneath

So far I came up with such solutions, but I try to gather as many ideas as possible before we settle on one:

  1. Introduce shadows to all points. 2 points in the same spot will make the shadow darker. Still no way to select 2nd point. But this option doesn't require any user input which is great.
  2. Let user introduce some random noise to the data. Which will make the points spread in different directions.
  3. Let user "rotate" the points as if we could look at the at an angle.
  4. Introduce more shapes to the points. So that a square is visible under a circle (or vice versa). But this one has many downsides and won't always work.
  5. Make points a bit transparent - this one also has lot's of problems.

Any other ideas?

2 Answers 2


You could introduce some different style for point clusters when multiple points overlap, much like they do in maps, for example. And then, when user hovers (or tap, or click) on the cluster, you could open a popup with all the clustered points displayed in a list. You can make the list elements clickable and display all the information you need.

Something like this: enter image description here

  • 1
    Thanks for the idea! Though this does require clustering and therefore we'd show the list of clusters instead of the list of original points. But still it's a valid possibility. Commented Sep 1, 2021 at 8:51

It depends on how many data points are you talking about - 10? 100? 1000? More?

For huge numbers of points, the solutions here will ease things but not totally solve them --> https://www.python-graph-gallery.com/134-how-to-avoid-overplotting-with-python - and they include jittering and transparency

For a few points... Jitter is good when one or both of the axes use discrete values and is also when exactly overlapping points tend to occur. Using it on continuous axes though is a bit dodgier: if the values are always whole numbers I can tell a point at 3 and a bit is really 3 - on a continuous scale I interpret it as 3 and a bit

'Spidering' can work nicely, though its not without its own issues https://stackoverflow.com/questions/24220106/overlappingmarkerspiderfier-show-which-markers-are-in-a-spiderfy-cluster - it's basically jitter but you work out which points need it first and then draw small lines to the true coordinate

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.