Based on Oleksandr's excellent [design idea][1] here is my re-implementation of his package which offers a much richer set of shapes.


----------

UPDATE from July 2021
------
New version came out! Now it allows direct generation of `Graphics` objects that can be immediately used as markers for `PlotMarkers`. The new version contains no incompatible changes.

The [Wolfram Function Repository version][2] is also updated, but now it differs from the version published here and [on GitHub][3] in the sense that it does not include the general-purpose functions used to generate the built-in shapes on the fly at the package loading time. It was a decision made by the reviewer to define them simply as lists of points, probably for better performance. The functionality and syntax are the same.
 
----------

UPDATE from October 2019
------

Now my function is [published][2] in the [Wolfram Function Repository][4] what means that it is available for users of *Mathematica* version 12.0 or higher as `ResourceFunction["PolygonMarker"]`. Users of previous versions should install the package as described below (the functionality is the same). 


----------


## How to install the package ##

The most recent version of the package can be installed from GitHub by evaluating the following:

    (* Load the package code *)
    package = 
      Import["http://raw.github.com/AlexeyPopkov/PolygonPlotMarkers/master/PolygonPlotMarkers.m", "Text"];

    (* Install the package (existing file will be overwritten!) *)
    Export[FileNameJoin[{$UserBaseDirectory, "Applications", 
        "PolygonPlotMarkers.m"}], package, "Text"];

For manual installation copy the code from the bottom of this post and save it as "PolygonPlotMarkers.m" in the directory `SystemOpen[FileNameJoin[{$UserBaseDirectory, "Applications"}]]`.


----------
## Description of the package ##

>  - The basic usage syntax is <code>PolygonMarker[*shape*, *size*]</code> where <code>*shape*</code> is a name of built-in shape or a list of 2D coordinates describing a non-selfintersecting polygon. The <code>*size*</code> can be given as a number or in `Scaled` or `Offset` form. 
>
>  - `PolygonMarker[All]` and `PolygonMarker[]` return the list of names of built-in shapes. 
>
>  - <code>PolygonMarker[*shape*, *size*]</code> returns `Polygon` graphics primitive which can be used in `Graphics`.
>
>  - <code>PolygonMarker[*shape*, *size*, *style*]</code>, where <code>*style*</code> is a list of graphics directives applied to <code>*shape*</code>, returns a `Graphics` object which can be used as a marker for `PlotMarkers`.
> 
> - <code>PolygonMarker[*shape*, *size*, *style*, *options*]</code> returns a `Graphics` object with <code>*options*</code> applied.
> 
>  - With `Offset` <code>*size*</code> specification the plot marker has fixed size specified in *printer's points* independent of the size of the plot. 
>
>  - `PolygonMarker`s with identical <code>*size*</code> specifications have equal areas (not counting the area taken by the **edge** of generated `Polygon`). <code>PolygonMarker[*shape*, *size*]</code> returns shape with area <code>*size*<sup>2</sup></code> in the internal coordinate system of `Graphics`. <code>PolygonMarker[*shape*, Offset\[*size*\]]</code> returns shape with area <code>*size*<sup>2</sup></code> *square printer's points*.
>
>  - The centroid of polygon returned by <code>PolygonMarker[*shape*, *size*]</code> is always placed at `{0, 0}` in the internal coordinate system of `Graphics`.
>
>  - <code>PolygonMarker[*shape*, *size*, *positions*]</code> where <code>*positions*</code> is a list of 2D coordinates evaluates to <code>Translate[PolygonMarker[*shape*, *size*], *positions*]</code>. It represents a collection of multiple identical copies of the shape with centroids placed at <code>*positions*</code>.

----------


## Basic examples of use ##

The complete list of built-in named shapes:

    Needs["PolygonPlotMarkers`"]

    allShapes = PolygonMarker[All]
    Tooltip[PolygonMarker[#, 1,
        {FaceForm[Hue@Random[]], EdgeForm[{Black, AbsoluteThickness[0.5], JoinForm["Miter"]}]}, 
        {ImageSize -> 30, PlotRange -> 1.5, PlotRangePadding -> 0, ImagePadding -> 0}], #] & /@ allShapes

>     {"TripleCross", "Y", "UpTriangle", "UpTriangleTruncated", "DownTriangle", 
>     "DownTriangleTruncated", "LeftTriangle", "LeftTriangleTruncated", "RightTriangle", 
>     "RightTriangleTruncated", "ThreePointedStar", "Cross", "DiagonalCross", "Diamond", 
>     "Square", "FourPointedStar", "DiagonalFourPointedStar", "FivefoldCross", "Pentagon", 
>     "FivePointedStar", "FivePointedStarThick", "SixfoldCross", "Hexagon", "SixPointedStar", 
>     "SixPointedStarSlim", "SevenfoldCross", "SevenPointedStar", "SevenPointedStarNeat", 
>     "SevenPointedStarSlim", "EightfoldCross", "Disk", "H", "I", "N", "Z", "S", "Sw", "Sl"}

[![all available shapes][5]][5]

Automatic plot legends (*Mathematica* 10 or higher) often require a larger value for the `LegendMarkerSize` option in order to avoid cropping. Filled markers which pick up `PlotStyle` and `PlotTheme` automatically:

    fm[name_String, size_ : 8] := PolygonMarker[name, Offset[size], EdgeForm[]];
    
    SeedRandom[25];
    ListPlot[Table[Accumulate@RandomReal[1, 10] + i, {i, 6}], 
     PlotMarkers -> 
      fm /@ {"Triangle", "Y", "Diamond", "ThreePointedStar", 
        "FivePointedStar", "TripleCross"}, Joined -> True, 
     PlotStyle -> ColorData[54, "ColorList"], 
     PlotLegends -> 
      PointLegend[Automatic, LegendMarkerSize -> {50, 37}, 
       LegendLayout -> (Column[Row /@ #, Spacings -> -1] &)], 
     ImageSize -> 450]

> [![output][6]][6]

Empty markers which pick up `PlotStyle` and `PlotTheme` automatically:

    em[name_String, size_ : 7] := PolygonMarker[name, Offset[size],
       {Dynamic@EdgeForm@Directive[CurrentValue["Color"], JoinForm["Round"], AbsoluteThickness[2], Opacity[1]], FaceForm[White]}, ImagePadding -> 6];
    
    SeedRandom[2];
    ListPlot[Table[Accumulate@RandomReal[1, 10] + i, {i, 3}], 
     PlotMarkers -> em /@ {"Triangle", "Square", "Diamond"}, 
     Joined -> True, 
     PlotLegends -> PointLegend[Automatic, LegendMarkerSize -> {40, 25}], ImageSize -> 450]
    
    SeedRandom[3];
    ListPlot[Table[Accumulate@RandomReal[1, 10] + i, {i, 3}], 
     PlotMarkers -> em /@ {"Triangle", "Square", "Diamond"}, 
     Joined -> True, 
     PlotLegends -> PointLegend[Automatic, LegendMarkerSize -> {40, 25}], 
     PlotTheme -> "Marketing", ImageSize -> 450]

> [![output][7]][7]

> [![output][8]][8]

Filled markers with lighter filling colors:

    fm2[name_String, size_ : 9] := PolygonMarker[name, Offset@size, {
        Dynamic@EdgeForm[{CurrentValue["Color"], Opacity[1]}],
        Dynamic@FaceForm@Lighter[CurrentValue["Color"], 0.75]}];
    
    data = Table[{x, BesselJ[k, x]}, {k, 0, 2}, {x, 0, 10, 0.5}];
    
    ListPlot[data, 
     PlotMarkers -> fm2 /@ {"UpTriangle", "Square", "Circle"}, 
     Joined -> True, Frame -> True, Axes -> False, ImageSize -> 450, 
     PlotRangePadding -> {Scaled[.05], Scaled[.1]}]

> [![output][9]][9]

## Advanced usage ##

The third argument of `PolygonMarker` can be used to specify the coordinate(s) where the shape should be placed:

    Graphics[{FaceForm[],EdgeForm[{AbsoluteThickness[1],JoinForm["Miter"]}],
           EdgeForm[Blue],PolygonMarker["Circle",Offset[7],RandomReal[{-1,1},{20,2}]],
           EdgeForm[Red],PolygonMarker["ThreePointedStar",Offset[7],RandomReal[{-1,1},{20,2}]],
           EdgeForm[Darker@Green],PolygonMarker["FourPointedStar",Offset[7],RandomReal[{-1,1},{20,2}]],
           EdgeForm[Darker@Yellow],PolygonMarker["FivePointedStar",Offset[7],RandomReal[{-1,1},{20,2}]]},
          AspectRatio->1/2,ImageSize->450,Frame->True]

> [![output][10]][10]

Construct a list plot directly from graphics primitives:

    data = Table[{x, BesselJ[k, x]}, {k, 0, 3}, {x, 0, 10, 0.5}];
    markers = {"Circle", "ThreePointedStar", "FourPointedStar", 
       "FivePointedStar"};
    colors = {Blue, Red, Darker@Green, Darker@Yellow};
    Graphics[Table[{colors[[i]], Line[data[[i]]], FaceForm[White], 
       EdgeForm[{colors[[i]], AbsoluteThickness[1], JoinForm["Miter"]}], 
       PolygonMarker[markers[[i]], Offset[7], data[[i]]]}, {i, 
       Length[data]}], AspectRatio -> 1/2, ImageSize -> 450, 
     Frame -> True]

> [![output][11]][11]

Construct a custom list plot where open plot markers have transparent faces for each other (but not for the lines):

    data = Table[{x, BesselJ[k, x]}, {k, 0, 4}, {x, 0, 10, 0.5}];
    markers = {"Circle", "ThreePointedStar", "FourPointedStar", 
       "DiagonalFourPointedStar", "FivePointedStar"};
    colors = {Blue, Red, Green, Yellow, Orange};
    background = Darker@Gray;
    Graphics[{Table[{colors[[i]], AbsoluteThickness[1.5], Line[data[[i]]],
         FaceForm[background], EdgeForm[None], 
        PolygonMarker[markers[[i]], Offset[7], data[[i]]]}, {i, 
        Length[data]}], 
      Table[{FaceForm[None], 
        EdgeForm[{colors[[i]], AbsoluteThickness[1.5], 
          JoinForm["Miter"]}], 
        PolygonMarker[markers[[i]], Offset[7], data[[i]]]}, {i, 
        Length[data]}]}, AspectRatio -> 1/2, ImageSize -> 500, 
     Frame -> True, Background -> background, FrameStyle -> White, 
     ImagePadding -> {{30, 20}, {25, 20}}]

> [![output][12]][12]

Neat Examples
-------------

Center markers which pick up `PlotStyle` and `PlotTheme` automatically:

    cfm[name_String, size_ : 9] := Show[
       PolygonMarker[name, Offset@size, {
         FaceForm[White],
         Dynamic@
          EdgeForm[{CurrentValue["Color"], AbsoluteThickness[1], 
            Opacity[1]}]}],
       PolygonMarker[name, Offset[size/2], EdgeForm[None]]];
    
    data = Table[{x, BesselJ[k, x]}, {k, 0, 2}, {x, 0, 10, 0.5}];
    
    ListPlot[data, 
     PlotMarkers -> cfm /@ {"UpTriangle", "Square", "Circle"}, 
     Joined -> True, Frame -> True, Axes -> False, ImageSize -> 450, 
     PlotRangePadding -> {Scaled[.05], Scaled[.1]}, 
     PlotLegends -> PointLegend[Automatic, LegendMarkerSize -> {40, 30}], 
     ImageSize -> 450]

> [![output][13]][13]

Half filled markers which pick up `PlotStyle` and `PlotTheme` automatically:

    hfm1[name_String, size_ : 9] := Show[
       PolygonMarker[name, Offset@size, {
         FaceForm[White],
         Dynamic@
          EdgeForm[{CurrentValue["Color"], AbsoluteThickness[1], 
            Opacity[1]}]}],
       PolygonMarker[name, Offset@size, 
         EdgeForm[None]] /. {x_?Negative, y_?NumericQ} :> {0, y}];
    
    data = Table[{x, BesselJ[k, x]}, {k, 0, 2}, {x, 0, 10, 0.5}];
    
    ListPlot[data, 
     PlotMarkers -> hfm1 /@ {"UpTriangle", "Square", "Circle"}, 
     Joined -> True, Frame -> True, Axes -> False, ImageSize -> 450, 
     PlotRangePadding -> {Scaled[.05], Scaled[.1]}, 
     PlotLegends -> PointLegend[Automatic, LegendMarkerSize -> {40, 30}], 
     ImageSize -> 450]

> [![output][14]][14]

    hfm2[name_String, size_ : 9] := Show[
       PolygonMarker[name, Offset@size, {
         FaceForm[White],
         Dynamic@
          EdgeForm[{CurrentValue["Color"], AbsoluteThickness[1], 
            Opacity[1]}]}],
       Graphics[{EdgeForm[None], 
         Replace[RegionDifference[PolygonMarker[name], 
           Rectangle[{-10, -10}, {10, 0}]], 
          p : {x_, y_} :> Offset[size p, {0, 0}], {-2}]}]];
    
    data = Table[{x, BesselJ[k, x]}, {k, 0, 3}, {x, 0, 10, 0.5}];
    
    ListPlot[data, 
     PlotMarkers -> 
      hfm2 /@ {"Diamond", "Square", "Circle", "RightTriangle"}, 
     Joined -> True, Frame -> True, Axes -> False, ImageSize -> 450, 
     PlotRangePadding -> {Scaled[.05], Scaled[.1]}, 
     PlotLegends -> PointLegend[Automatic, LegendMarkerSize -> {40, 30}], 
     ImageSize -> 450]

> [![output][15]][15]

Contrast markers which pick up `PlotStyle` and `PlotTheme` automatically:

    cfm2[name_String, size_ : 9] := Show[
       PolygonMarker[name, Offset@size, {
         FaceForm[White],
         Dynamic@
          EdgeForm[{CurrentValue["Color"], AbsoluteThickness[1], 
            Opacity[1]}]}],
       Graphics[{EdgeForm[None], 
         Replace[RegionDifference[
           RegionDifference[PolygonMarker[name], 
            Triangle[{{-10, 10}, {10, 10}, {0, 0}}]], 
           Triangle[{{-10, -10}, {10, -10}, {0, 0}}]], 
          p : {x_, y_} :> Offset[size p, {0, 0}], {-2}]}]];
    
    data = Table[{x, BesselJ[k, x]}, {k, 0, 3}, {x, 0, 10, 0.5}];
    
    ListPlot[data, 
     PlotMarkers -> 
      cfm2 /@ {"Diamond", "Square", "Circle", "DiagonalFourPointedStar"}, 
     Joined -> True, Frame -> True, Axes -> False, ImageSize -> 450, 
     PlotRangePadding -> {Scaled[.05], Scaled[.1]}, 
     PlotLegends -> PointLegend[Automatic, LegendMarkerSize -> {40, 30}], 
     ImageSize -> 450]

> [![output][16]][16]



The package allows using arbitrary polygon as a plot marker. Here is an auxiliary function that converts a simple glyph into a set of points suitable for `PolygonMarker`:

    pts[l_String] := 
      First[Cases[
        ImportString[
         ExportString[Style[l, FontFamily -> "Verdana", FontSize -> 20], 
          "PDF"], 
               
         If[$VersionNumber >= 12.2, {"PDF", "PageGraphics"}, {"PDF", 
           "Pages"}]], c_FilledCurve :> c[[2, 1]], Infinity]];

(This conversion is approximate. If the precise conversion is needed one can apply one of the methods described in "[How can I adaptively simplify a curved shape?][17]")

An example of use:

    ListPlot[ConstantArray[Range[5],7]+Range[0,12,2],PlotStyle->Gray,Joined->True,PlotMarkers->{PolygonMarker[pts["U"],Scaled[0.05],{FaceForm[LightBlue],EdgeForm[Black]}],
      PolygonMarker[pts["S"],Scaled[0.05],{FaceForm[LightBlue],EdgeForm[Black]}],
      PolygonMarker["FivePointedStar",Scaled[0.05],{FaceForm[Red],EdgeForm[Black]}],
      PolygonMarker["FourPointedStar",Scaled[0.05],{FaceForm[Yellow],EdgeForm[Black]}],
      PolygonMarker["DownTriangle",Scaled[0.05],{FaceForm[Green],EdgeForm[Black]}],
      PolygonMarker["DiagonalSquare",Scaled[0.05],{FaceForm[Brown],EdgeForm[Black]}],
      Graphics[{FaceForm[Blue],EdgeForm[Black],Disk[{0,0},Scaled[0.05/Sqrt[\[Pi]]]]}]},PlotRange->{{0,6},{0,18}},ImageSize->450]

> [![output][18]][18]

Here is an example of a plot where plotting symbols significantly overlap, I use here some of the symbols [recommended][19] by [William Cleveland][20] in his early works:

    SeedRandom[11]; (* for reproducibility *)
    ListPlot[RandomReal[{-1, 1}, {6, 20, 2}], PlotMarkers -> {
       Graphics[{FaceForm[None], EdgeForm[{Black, Thickness[.008]}], 
         Disk[{0, 0}, Scaled[0.03/Sqrt[π]]]}, AlignmentPoint -> {0, 0}],
       Graphics[{FaceForm[None], EdgeForm[{Black, Thickness[.008]}], 
         PolygonMarker["UpTriangle", Scaled[0.03]]}, AlignmentPoint -> {0, 0}],
       Graphics[{FaceForm[Black], EdgeForm[None], 
         PolygonMarker["Cross", Scaled[0.03]]}, AlignmentPoint -> {0, 0}],
       Graphics[{FaceForm[Black], EdgeForm[None], 
         PolygonMarker[pts["U"], Scaled[0.03]]}, AlignmentPoint -> {0, 0}],
       Graphics[{FaceForm[Black], EdgeForm[None], 
         PolygonMarker["Sl", Scaled[0.03]]}, AlignmentPoint -> {0, 0}],
       Graphics[{FaceForm[Black], EdgeForm[None], 
         PolygonMarker[pts["W"], Scaled[0.03]]}, AlignmentPoint -> {0, 0}]},
     Frame -> True, Axes -> False, PlotRangePadding -> Scaled[.1]]

> [![plot][21]][20]

Additional examples and explanations can be found in the following answers:

 - [Plot markers where the boundary has the same hue as the body but is darker][22]

 - [Perfect vertical alignment of `PointLegend` markers and their labels][23]

 - [Making antisymmetric curvilinear marker "S"][24]

 - [How to specify `PlotMarkers` that scale when graphic is resized?][25]

 - [Bug in `Export` of figures with `PlotMarkers`?][26]



----------

----------

The code of the package
-----------------------


    BeginPackage["PolygonPlotMarkers`"];
    
    ClearAll[PolygonMarker];
    PolygonMarker::usage="\!\(\*RowBox[{\"PolygonMarker\", \"[\",StyleBox[\"\\\"\\!\\(\\*StyleBox[\\\"name\\\",\\\"TI\\\"]\\)\\\"\", ShowStringCharacters->True], \"]\"}]\) returns a unit area Polygon describing the shape \!\(\*StyleBox[\"\\\"\\!\\(\\*StyleBox[\\\"name\\\",\\\"TI\\\"]\\)\\\"\", ShowStringCharacters->True]\) with centroid at {0,0}.\n\!\(\*RowBox[{\"PolygonMarker\", \"[\", RowBox[{\"{\", RowBox[{SubscriptBox[StyleBox[\"p\", \"TI\"], StyleBox[\"1\", \"TR\"]], \",\", \ StyleBox[\"\[Ellipsis]\", \"TR\"], \",\", SubscriptBox[StyleBox[\"p\", \"TI\"], StyleBox[\"n\", \"TI\"]]}], \"}\"}], \"]\"}]\) returns a unit area Polygon with shape described by points \!\(\*SubscriptBox[StyleBox[\"p\", \"TI\"], StyleBox[\"i\", \"TI\"]]\) and centroid at {0,0}.\n\!\(\*RowBox[{\"PolygonMarker\", \"[\", RowBox[{StyleBox[\"shape\", \"TI\"], \",\", StyleBox[\"size\", \"TI\"]}], \"]\"}]\) returns Polygon of \!\(\*StyleBox[\"shape\", \"TI\"]\) with centroid at {0,0} and area \!\(\*SuperscriptBox[StyleBox[\"size\", \"TI\"], StyleBox[\"2\", \"TR\"]]\).\n\!\(\*RowBox[{\"PolygonMarker\", \"[\", RowBox[{StyleBox[\"shape\", \"TI\"], \",\", StyleBox[\"size\", \"TI\"], \",\", StyleBox[\"style\", \"TI\"]}], \"]\"}]\) returns a Graphics object which can be used as a marker for PlotMarkers where the style of \!\(\*StyleBox[\"shape\", \"TI\"]\) is defined by \!\(\*StyleBox[\"style\", \"TI\"]\).\n\!\(\*RowBox[{\"PolygonMarker\", \"[\",\"All\", \"]\"}]\) returns the list of names of predefined shapes.";
    SyntaxInformation[PolygonMarker]={"ArgumentsPattern"->{_,_.,_.,OptionsPattern[]}};
    PolygonMarker::nonsimple="The specified shape doesn't represent a simple polygon.";
    Options[PolygonMarker] = {AlignmentPoint -> {0,0}, BaselinePosition -> Axis, AspectRatio -> Automatic, Axes -> False, AxesLabel -> None, AxesOrigin -> {0,0}, AxesStyle -> {}, Background -> None, BaseStyle -> {},  ContentSelectable -> Automatic, CoordinatesToolOptions -> Automatic, DisplayFunction :> Identity, Epilog -> {}, FormatType :> TraditionalForm, Frame -> False, FrameLabel -> None, FrameStyle -> {}, FrameTicks -> Automatic, FrameTicksStyle -> {}, GridLines -> None, GridLinesStyle -> {}, ImageMargins -> 0., ImagePadding -> All, ImageSize -> Automatic, ImageSizeRaw -> Automatic, LabelStyle -> {}, Method -> Automatic, PlotLabel -> None, PlotRange -> All, PlotRangeClipping -> False, PlotRangePadding -> Automatic, PlotRegion -> Automatic, PreserveImageOptions -> Automatic, Prolog -> {}, RotateLabel -> True, Ticks -> Automatic, TicksStyle -> {}};
    
    Begin["`Private`"];
    
    ClearAll[PolygonArea,PolygonCentroid,LineIntersectionPoint,ngon,nstar,ncross,scale,coords];
    (*The shoelace method for computing the area of polygon http://mathematica.stackexchange.com/a/22587/280*)
    PolygonArea[pts_?MatrixQ]:=Abs@Total[Det/@Partition[pts,2,1,1]]/2;
    (*http://mathematica.stackexchange.com/a/7715/280*)
    PolygonCentroid[pts_?MatrixQ]:=With[{dif=Map[Det,Partition[pts,2,1,{1,1}]]},ListConvolve[{{1,1}},Transpose[pts],{-1,-1}] . dif/(3 Total[dif])];
    (*http://mathematica.stackexchange.com/a/51399/280*)
    LineIntersectionPoint[{a_,b_},{c_,d_}]:=(Det[{a,b}] (c-d)-Det[{c,d}] (a-b))/Det[{a-b,c-d}];
    
    ngon[n_,phase_:0]:=Table[{0,1} . RotationMatrix[2k Pi/n+phase],{k,0,n-1}];
    (* 
       nn - number of vertices in related polygram
       step - step at which vertices in the polygram are connected (must be lesser than nn/2)
       n - number of points in the final star (must be divisor of nn)  an illustration: http://en.wikipedia.org/wiki/Star_polygon#Simple_isotoxal_star_polygons
    *)

    nstar[n_/;n>=5,phase_:0]:=nstar[n,2,n,phase];
    nstar[nn_,step_,n_,phase_:0]/;Divisible[nn,n]&&nn/2>step>nn/n:=Module[{a1,a2,b1,b2,ab},{a1,a2,b1,b2}=ngon[nn][[{1,1+step,1+nn/n,nn/n-step}]];
    ab=LineIntersectionPoint[{a1,a2},{b1,b2}];
    Flatten[Table[{a1,ab} . RotationMatrix[2k Pi/n+phase],{k,0,n-1}],1]];
    (*a-semiwidths of the crossing stripes*)
    ncross[n_,phase_:0,a_:1/10]:=Flatten[NestList[# . RotationMatrix[2Pi/n]&,{{-a,1},{a,1},{a,a Cot[Pi/n]}} . RotationMatrix[phase],n-1],1];
    
    (*Unitizes the area of the polygon*)
    scale[coords_]:=Chop[#/Sqrt@PolygonArea@#]&@N[coords,{18,18}];
    
    coords["UpTriangle"|"Triangle"]=ngon[3]//scale;
    coords["DownTriangle"]=ngon[3,Pi/3]//scale;
    coords["LeftTriangle"]=ngon[3,Pi/6]//scale;
    coords["RightTriangle"]=ngon[3,-Pi/6]//scale;
    coords["ThreePointedStar"]=nstar[12,5,3]//scale;
    coords["DiagonalSquare"|"Diamond"]=ngon[4,0]//scale;
    coords["Square"]=ngon[4,Pi/4]//scale;
    coords["FourPointedStar"]=nstar[8,3,4]//scale;
    coords["DiagonalFourPointedStar"]=nstar[8,3,4,Pi/4]//scale;
    coords["Pentagon"]=ngon[5]//scale;
    coords["FivePointedStar"]=nstar[5]//scale;
    coords["FivePointedStarThick"]=nstar[20,7,5]//scale;
    coords["Hexagon"]=ngon[6]//scale;
    coords["SixPointedStar"]=nstar[6]//scale;
    coords["SixPointedStarSlim"]=nstar[12,5,6]//scale;
    coords["SevenPointedStar"]=nstar[7]//scale;
    coords["SevenPointedStarNeat"]=nstar[14,5,7]//scale;
    coords["SevenPointedStarSlim"]=nstar[14,6,7]//scale;
    coords["Cross"|"+"]=ncross[4]//scale;
    coords["DiagonalCross"|"CrossDiagonal"|"X"|"x"]=ncross[4,Pi/4]//scale;
    coords["TripleCross"|"TripleCrossUp"]=ncross[3]//scale;
    coords["TripleCrossDown"|"Y"|"y"]=ncross[3,Pi/3]//scale;
    coords["FivefoldCross"]=ncross[5]//scale;
    coords["SixfoldCross"]=ncross[6]//scale;
    coords["SevenfoldCross"]=ncross[7]//scale;
    coords["EightfoldCross"]=ncross[8]//scale;
    (*The truncated triangle shape originates from the Cross's Theorem http://demonstrations.wolfram.com/CrosssTheorem/*)
    coords["UpTriangleTruncated"|"TriangleTruncated"|"TruncatedTriangle"]=Flatten[{{-3,6+Sqrt[3]},{3,6+Sqrt[3]}} . RotationMatrix[# Pi/3]&/@{0,2,4},1]//scale;
    coords["DownTriangleTruncated"]=coords["UpTriangleTruncated"] . ReflectionMatrix[{0,1}];
    coords["LeftTriangleTruncated"]=coords["UpTriangleTruncated"] . RotationMatrix[Pi/6];
    coords["RightTriangleTruncated"]=coords["UpTriangleTruncated"] . RotationMatrix[-Pi/6];
    (*Disk approximated by 24-gon*)
    coords["Disk"|"Circle"]=ngon[24]//scale;
    
    (*Plotting symbols recommended in[Cleveland W.S.The Elements of Graphing Data (1985)]*)
    (*Symmetric symbol "H"*)
    coords["H"]=Join[#,-#]&@Join[#,Reverse@# . {{1,0},{0,-1}}]&@{{333,108},{333,630},{585,630}}//scale;
    (*Symmetric symbol "I"*)
    coords["I"]=Join[#,-#]&@{{-20,-68},{-64,-68},{-64,-104},{64,-104},{64,-68},{20,-68}}//scale;
    (*Antisymmetric symbol "N"*)
    coords["N"]=Join[#,-#]&@{{18,-32},{30,-32},{30,32},{17,32},{17,-12}}//scale;
    (*Antisymmetric symbol "Z"*)
    coords["Z"]=Join[#,-#]&@{{-567,-432},{-567,-630},{567,-630},{567,-414},{-234,-414}}//scale;
    (*Antisymmetric symbol "S" (simple)*)
    coords["S"]=Join[#,-#]&@{{-176,-54},{116,-54},{167,-100},{167,-170},{116,-216},{-284,-216},{-284,-324},{176,-324},{293,-216},{293,-54}}//scale;
    (*Antisymmetric symbol "S" (curved,long)*)
    coords["LongS"|"SLong"|"Sl"]=Join[#,-#]&@{{-(49/16),-(3/11)},{-(425/91),23/28},{-(141/26),31/12},{-(165/32),88/19},{-(167/45),106/17},{-(24/17),149/21},{121/69,233/33},{130/27,31/5},{130/27,118/29},{127/47,199/39},{7/20,233/42},{-(12/7),139/26},{-(65/21),139/31},{-(395/113),114/35},{-(157/52),77/39},{-(83/44),56/41},{9/22,39/43}}//scale;
    (*Antisymmetric symbol "S" (curved,wide)*)
    coords["WideS"|"SWide"|"Sw"]=Join[#,-#]&@{{80/11,-(3/5)},{49/6,-(9/4)},{97/12,-(41/11)},{39/5,-(35/8)},{88/13,-(65/12)},{51/10,-(49/8)},{2,-(13/2)},{-(20/11),-(13/2)},{-(37/8),-(81/13)},{-(81/13),-(40/7)},{-(59/8),-(54/11)},{-(81/10),-(26/7)},{-(70/11),-(29/9)},{-(57/11),-(46/11)},{-(11/4),-(33/7)},{11/7,-(19/4)},{16/3,-(37/9)},{31/5,-(38/11)},{32/5,-(38/13)},{37/6,-(49/24)},{61/13,-(6/5)},{23/7,-(13/14)},{-(25/9),-(4/5)},{-(23/4),-(3/13)}}//scale;
    
    PolygonMarker[name_String]:=Polygon[coords[name]];
    PolygonMarker[name_String,size_?NumericQ]:=Polygon[size coords[name]];
    PolygonMarker[name_String,(h:Scaled|Offset)[size_?NumericQ]]:=Polygon[h[size #,{0,0}]&/@coords[name]];
    PolygonMarker[coords:{{_?NumericQ,_?NumericQ}..},size_?NumericQ]:=Polygon[size N[scale[Transpose[Transpose[coords]-PolygonCentroid[coords]]],{16,16}]];
    PolygonMarker[coords:{{_?NumericQ,_?NumericQ}..},Scaled[size_?NumericQ]]:=Polygon[Scaled[size #,{0,0}]&/@N[scale[Transpose[Transpose[coords]-PolygonCentroid[coords]]],{16,16}]];
    PolygonMarker[arg:_String|{{_?NumericQ,_?NumericQ}..},size:_?NumericQ|(Scaled|Offset)[_?NumericQ],positions:{_?NumericQ,_?NumericQ}|{{_?NumericQ,_?NumericQ}..}]:=Translate[PolygonMarker[arg,size],positions];
    PolygonMarker[]=PolygonMarker[All]={"TripleCross","Y","UpTriangle","UpTriangleTruncated","DownTriangle","DownTriangleTruncated","LeftTriangle","LeftTriangleTruncated","RightTriangle","RightTriangleTruncated","ThreePointedStar","Cross","DiagonalCross","Diamond","Square","FourPointedStar","DiagonalFourPointedStar","FivefoldCross","Pentagon","FivePointedStar","FivePointedStarThick","SixfoldCross","Hexagon","SixPointedStar","SixPointedStarSlim","SevenfoldCross","SevenPointedStar","SevenPointedStarNeat","SevenPointedStarSlim","EightfoldCross","Disk","H","I","N","Z","S","Sw","Sl"};
    (*A subset of plot markers suitable for use when plotting symbols on the plot significantly overlap.*)
    PolygonMarker["Overlap"]={"TripleCross","Y","UpTriangle","DownTriangle","LeftTriangle","RightTriangle","ThreePointedStar","Cross","DiagonalCross","Diamond","Square","FourPointedStar","DiagonalFourPointedStar","FivefoldCross","FivePointedStar","FivePointedStarThick","Disk","H","I","N","Z","S","Sw","Sl"};
    (* Generate a Graphics object which can be used as a marker for PlotMarkers *)
    PolygonMarker[shape_,size_,g_]:=PolygonMarker[shape,size,{g}];
    PolygonMarker[shape_,size_,{g___}]:=Block[{p=PolygonMarker[shape,size]},Graphics[{g,p},AlignmentPoint->{0,0},ImagePadding->All,PlotRange->All]/;Head[p]===Polygon];
    (* This form allows to construct composite plot markers containing additional graphics primitives *)
    PolygonMarker[shape_,size_,{{g___},{primitives___}}]:=Block[{p=PolygonMarker[shape,size]},Graphics[{{g,p},{primitives}},AlignmentPoint->{0,0},ImagePadding->All,PlotRange->All]/;Head[p]===Polygon];
    (* This form allows to pass any Graphics options as an argument of PolygonMarker *)
    PolygonMarker[shape_,size_,style_,opts:OptionsPattern[]]:=Block[{gr=PolygonMarker[shape,size,style]},Show[gr,opts]/;Head[gr]===Graphics];
    
    End[];
    
    EndPackage[];


  [1]: https://mathematica.stackexchange.com/a/84858/280
  [2]: https://resources.wolframcloud.com/FunctionRepository/resources/PolygonMarker
  [3]: https://github.com/AlexeyPopkov/PolygonPlotMarkers
  [4]: https://resources.wolframcloud.com/FunctionRepository/
  [5]: https://i.sstatic.net/r7g9I.png
  [6]: https://i.sstatic.net/jkjBK.png
  [7]: https://i.sstatic.net/Y01su.png
  [8]: https://i.sstatic.net/YMDTA.png
  [9]: https://i.sstatic.net/ZzcS8.png
  [10]: https://i.sstatic.net/P8MQc.png
  [11]: https://i.sstatic.net/1QaoH.png
  [12]: https://i.sstatic.net/3j5Qj.png
  [13]: https://i.sstatic.net/DG5bU.png
  [14]: https://i.sstatic.net/XC3so.png
  [15]: https://i.sstatic.net/71yxC.png
  [16]: https://i.sstatic.net/x1cI8.png
  [17]: https://mathematica.stackexchange.com/q/137937/280
  [18]: https://i.sstatic.net/1HaZ9.png
  [19]: https://graphicdesign.stackexchange.com/q/36908/946
  [20]: http://www.stat.purdue.edu/~wsc/
  [21]: https://i.sstatic.net/pH9P8.png
  [22]: https://mathematica.stackexchange.com/a/158221/280
  [23]: https://mathematica.stackexchange.com/a/137758/280
  [24]: https://mathematica.stackexchange.com/a/138348/280
  [25]: https://mathematica.stackexchange.com/a/145891/280
  [26]: https://mathematica.stackexchange.com/a/250857/280