Open Sonja-Stockhaus opened 1 month ago
Btw I think for dpi=100
, the mpl points are slightly larger than the ds points because marker edges are drawn (default linewidth = 1.5), see https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.scatter.html.
However, this is not the actual problem
Solution for now: use dpi/100
as a factor to adapt px
to varying dpi
Now it looks like this, for dpi [50, 100, 200, 300]
using blob.pl.render_points(element="blobs_points", size=400, color="blue").pl.render_points(element="blobs_points", size=400, color="yellow", method="datashader", alpha=1).pl.show(dpi=100)
Should be correct imo
(matplotlib points bluse, datashader yellow)
Looks good to me. The tiny pixel offset is probably inevitable and acceptable.
For plotting points with matplotlib, we use the
s
argument ofscatter()
. The square root ofs
specifies the width and height of the markers in points.In the datashader approach, we use
ds.tf.spread(agg, px=px)
to regulate the size of the markers. Here,px
is calculated like this:px = int(np.round(np.sqrt(render_params.size)))
, to make the behavior agree to the matplotlib approach.Problem: If you alter the
dpi
inpl.show()
, the point size of the datashader points remains the same, whileit changes for matplotlib, leading to different sizes:dpi=100
, mpl=blue, ds=whitedpi=200
, mpl=blue, ds=whitedpi=50
, ds=blue, mpl=white (note: colors and order swapped!)