I'm trying to make a plot in matplotlib with transparent markers which have a fixed color edge . However, I can't seem to achieve a marker with transparent fill.
I have a minimum working example here:
import numpy as np import matplotlib.pyplot as plt x = np.arange(10) y1 = 2*x + 1 y2 = 3*x - 5 plt.plot(x,y1, 'o-', lw=6, ms=14) plt.plot(x,y2, 'o', ms=14, markerfacecolor=None, alpha=0.5, markeredgecolor='red', markeredgewidth=5) plt.show()
I tried two techniques I found online to achieve this: 1) Setting alpha parameter. However, this makes the marker edge transparent too, which is not the desired effect. 2) Setting markerfacecolor=None, although this has no effect on my plot
Is there a solution to this please?
How to make the marker face color transparent without making the line transparent in Matplotlib? Create x_data and y_data(sin(x_data)), using numpy. Plot curve using x_data and y_data, with marker style and marker size. By changing the alpha, we can make it transparent to opaque.
Utilize the alpha argument in our scatter method and pass in a numeric value between 0 and 1. A value of 0 will make the plots fully transparent and unable to view on a white background.
This is tricky in Matplotlib... you have to use a string "None"
instead of the value None
, then you can just do:
plt.plot(x,y2, 'o', ms=14, markerfacecolor="None", markeredgecolor='red', markeredgewidth=5)
In general it seems to be a better solution to use transparent colors, instead of the alpha
parameter. First of all because it does not affect any other colors and it helps to avoid the black fill bug reported by some in the comments. In this example - using the voxels
function to draw 2 voxels on the plot - the 4th number in the tuples stored in colors
represents the alpha value of an RGBA color. These normalized RGBA tuple notations can be used as colors throughout matplotlib.
import matplotlib.pyplot as plt, numpy as np, mpl_toolkits.mplot3d fig = plt.figure() ax = fig.gca(projection='3d') voxels = np.array([[[True],[True]]]) colors = np.array([[[(0., 0., 0., 0.)],[(1.0, 0., 0., 0.5)]]]) ax.voxels(voxels, facecolors=colors, edgecolor='k', linewidth=.5) plt.show(block=True)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With