coloring = Thread[{-1, -2, 0, 1, 2, 9} -> {Yellow, Purple, Green, Blue, Red, Cyan}];
data = {0, 0, -1, 1, 1, 2, 9, -2, 2, 1, 1, 1, 0, 0, 9, 9, -1, 0, 9, 2};
ca = ConstantArray[1, Length @ data];
PieChart[ca,
SectorOrigin -> {{Pi/2, "Clockwise"}, 0},
ChartStyle -> (data /. coloring),
ChartLabels -> Placed[{data, Range[Length@data]}, {"RadialCenter", "RadialOutside"}],
ChartBaseStyle -> EdgeForm[White]
Use "RadialCallout"
instead of "RadialOutside"
to get
Use SectorOrigin -> {{Pi/2, "Clockwise"}, 1}
to get
Update: Remove labels and add an arrow and legend:
PieChart[ca,
SectorOrigin -> {{π/2, "Clockwise"}, 0},
ChartStyle -> (data /. coloring), ChartBaseStyle -> EdgeForm[White],
Epilog -> {Line[{{0, 1}, {0, 1.2}}],
Arrowheads[Medium], Arrow[1.1 {Cos@#, Sin@#} & /@ Subdivide[π/2, π/4, 10]]},
ChartLegends -> (SwatchLegend[#2, #] & @@ Transpose[List @@@ coloring])]
Add label to one of the sectors:
PieChart[MapAt[Labeled[#, "this is\na test", "RadialCallout"] &, ca, {13}],
SectorOrigin -> {{π/2, "Clockwise"}, 0},
ChartStyle -> (data /. coloring), ChartBaseStyle -> EdgeForm[White],
Epilog -> {Line[{{0, 1}, {0, 1.2}}], Arrowheads[Medium],
Arrow[1.1 {Cos@#, Sin@#} & /@ Subdivide[π/2, π/4, 10]]},
ChartLegends -> (SwatchLegend[#2, #] & @@
Transpose[List @@@ coloring])]
positions = {5, 13, 17};
labels = {"label5", "label13", "label17"};
ca[[positions]] = MapThread[Labeled[#, #2, "RadialCallout"] &,
{ca[[positions]], labels}];
PieChart[ca, SectorOrigin -> {{π/2, "Clockwise"}, 0},
ChartStyle -> (data /. coloring), ChartBaseStyle -> EdgeForm[White],
Epilog -> {Line[{{0, 1}, {0, 1.2}}], Arrowheads[Medium],
Arrow[1.1 {Cos@#, Sin@#} & /@ Subdivide[π/2, π/4, 10]]},
ChartLegends -> (SwatchLegend[#2, #] & @@ Transpose[List @@@ coloring])]
DeleteDuplicates[data]
for your actual data? $\endgroup$