Home > Enterprise >  Make all data points of a matplotlib plot homogeneously transparent
Make all data points of a matplotlib plot homogeneously transparent

Time:10-12

I'd like to plot two scatter plots into the same Axes and turn the upper one's data points transparent such that the other plot shines through. However, I want the whole upper plot to have a homogeneous transparency level, such that superimposed markers of the upper plot do not add up their opacity as they would do if I simply set alpha=0.5.

In other words, I'd like both scatter plots to be rendered first and being set to one constant transparency level. Technically this should be possible for both raster and vector graphics (as SVG supports layer transparency, afaik), but either would be fine for me.

Here is some example code that displays what I do not want to achieve. ;)

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure(1, figsize=(6,4), dpi=160)
ax = fig.gca()

s1 = ax.scatter(np.random.randn(1000), np.random.randn(1000), color="b", edgecolors="none")
s2 = ax.scatter(np.random.randn(1000), np.random.randn(1000), color="g", edgecolors="none")

s2.set_alpha(0.5)  # sadly the same as setting `alpha=0.5`

fig.show()  # or display(fig)

output I'd like the green markers around (2,2) to not be darker where they superimpose, for example. Is this possible with matplotlib?

Thanks for your time! :)

CodePudding user response:

After searching some more, I found related questions and enter image description here I may have to come up with better methods than just taking the np.minimum of both layers to keep more color options (and probably save the axes and labels to a third layer). I did not try mplcairo as suggested in the other linked answer as it has too many dependencies for my use case (my solution should be portable).

I am still happy for additional input. :)

  • Related