@@ -4490,6 +4490,10 @@ def scatter(self, x, y, s=None, c=None, marker=None, cmap=None, norm=None,
44904490"s must be a scalar, "
44914491"or float array-like with the same size as x and y" )
44924492
4493+ # get the original edgecolor the user passed before we normalize
4494+ orig_edgecolor = edgecolors
4495+ if edgecolors is None :
4496+ orig_edgecolor = kwargs .get ('edgecolor' ,None )
44934497c ,colors ,edgecolors = \
44944498self ._parse_scatter_color_args (
44954499c ,edgecolors ,kwargs ,x .size ,
@@ -4518,6 +4522,36 @@ def scatter(self, x, y, s=None, c=None, marker=None, cmap=None, norm=None,
45184522path = marker_obj .get_path ().transformed (
45194523marker_obj .get_transform ())
45204524if not marker_obj .is_filled ():
4525+ if orig_edgecolor is not None :
4526+ _api .warn_external (
4527+ f"You passed a edgecolor/edgecolors ({ orig_edgecolor !r} ) "
4528+ f"for an unfilled marker ({ marker !r} ). Matplotlib is "
4529+ "ignoring the edgecolor in favor of the facecolor. This "
4530+ "behavior may change in the future."
4531+ )
4532+ # We need to handle markers that can not be filled (like
4533+ # '+' and 'x') differently than markers that can be
4534+ # filled, but have their fillstyle set to 'none'. This is
4535+ # to get:
4536+ #
4537+ # - respecting the fillestyle if set
4538+ # - maintaining back-compatibility for querying the facecolor of
4539+ # the un-fillable markers.
4540+ #
4541+ # While not an ideal situation, but is better than the
4542+ # alternatives.
4543+ if marker_obj .get_fillstyle ()== 'none' :
4544+ # promote the facecolor to be the edgecolor
4545+ edgecolors = colors
4546+ # set the facecolor to 'none' (at the last chance) because
4547+ # we can not not fill a path if the facecolor is non-null.
4548+ # (which is defendable at the renderer level)
4549+ colors = 'none'
4550+ else :
4551+ # if we are not nulling the face color we can do this
4552+ # simpler
4553+ edgecolors = 'face'
4554+
45214555if linewidths is None :
45224556linewidths = rcParams ['lines.linewidth' ]
45234557elif np .iterable (linewidths ):
@@ -4529,8 +4563,8 @@ def scatter(self, x, y, s=None, c=None, marker=None, cmap=None, norm=None,
45294563
45304564collection = mcoll .PathCollection (
45314565 (path ,),scales ,
4532- facecolors = colors if marker_obj . is_filled () else 'none' ,
4533- edgecolors = edgecolors if marker_obj . is_filled () else colors ,
4566+ facecolors = colors ,
4567+ edgecolors = edgecolors ,
45344568linewidths = linewidths ,
45354569offsets = offsets ,
45364570transOffset = kwargs .pop ('transform' ,self .transData ),