The solution may depend on whether the markers in the legend should be scaled compared to the original size or whether a constant marker size independent on the original size is desired.
A. Scale the markers
You may use the legend.markerscale
rcParam.
plt.rcParams["legend.markerscale"] = 0.3
or the markerscale
argument to the legend.
plt.legend(markerscale=0.3)
From the legend documentation:
markerscale
: None or int or float
The relative size of legend markers compared with the originally drawn ones. Default is None which will take the value from the legend.markerscale rcParam.
Example:
import matplotlib.pyplot as plt
plt.rcParams["legend.markerscale"] = 0.3
plt.scatter([.3,.5], [.3,.6], s=1000, label="label")
plt.scatter([.7,.4], [.3,.6], s=81, marker="^", label="label2")
plt.legend()
plt.show()

Note that this will scale all markers simultaneously.
B. Set a constant marker size
In case you want a constant marker size in the legend, independent on the actual size of the scatter points, the solution is slightly more complicated. You may use the legend's handler_map
to set the desired marker size to the legend handles.
import matplotlib.pyplot as plt
from matplotlib.legend_handler import HandlerPathCollection
sc = plt.scatter([.3,.5], [.3,.6], s=1000, label="label")
plt.scatter([.7,.4], [.3,.6], s=[100,300], marker="^", label="label2")
marker_size = 36
def update_prop(handle, orig):
handle.update_from(orig)
handle.set_sizes([marker_size])
plt.legend(handler_map={type(sc): HandlerPathCollection(update_func=update_prop)})
plt.show()
