You can use an undocumented trick: CurrentValue["Color"]
retrieves the current colour at a certain position within a Graphics
expression. I learned this from @halirutan in a post that I am too lazy to look up now.
If you have the current colour, you can do with it as you wish: you can inject it into an EdgeForm
or you can make it lighter by Blend
ing it with White
.
Needs["PolygonPlotMarkers`"]
Clear[marker]
marker[name_String, size_: 9] :=
Graphics[{
Dynamic@EdgeForm[CurrentValue["Color"]],
Dynamic@FaceForm@Blend[{White, CurrentValue["Color"]}, 0.25],
PolygonMarker[name, 1]}, ImageSize -> size]
data = Table[{x, BesselJ[k, x]}, {k, 0, 2}, {x, 0, 10, 0.5}];
ListPlot[data,
PlotMarkers -> marker /@ {"UpTriangle", "Square", "Circle"},
Joined -> True,
Frame -> True, Axes -> False]
To fully understand why this solution works, you should know that when Graphics[{foo}]
is passed as a plot marker, ListPlot
will change it to Graphics[{color, foo}]
to apply a certain colour.
(I don't remember which version of PolygonPlotMarkers I have installed at the moment. If you have the other one, some tweaks may be required.)