ClearAll[trimmedMeansF]
trimmedMeansF[dir_: Directive[Thick, Opacity[1, Red]]] := BoxWhiskerChart[
ConstantArray[#, 2] & /@ TrimmedMean[Transpose@#, {0, .05}],
{{"Fences", None}, {"Whiskers", Opacity[0]}, {"MedianMarker",
Opacity[0]}, {"MeanMarker", .8, dir}}] &;
Example:
SeedRandom[1]
r = RandomVariate[NormalDistribution[0, 1], 100]^2;
rr = {r, 1 + r, 2 + r};
Legended[Show[BoxWhiskerChart[rr,{{"Outliers"}, {"MeanMarker", Directive[Thick, Yellow]}},
ChartStyle -> 1, GridLines -> {None, Mean@Transpose@rr}],
trimmedMeansF[Directive[Thick, Cyan]]@rr],
LineLegend[Directive[Thick, #] & /@ {Yellow, Cyan}, {"means", "trimmed means"}]]
Alternatively, post-process to modify the position of the mean markers:
means1 = Mean@Transpose@rr;
means2 = TrimmedMean[Transpose@rr, {0, .05}];
bwc = BoxWhiskerChart[rr, {{"Outliers"}, {"MeanMarker", Directive[Thick, Yellow]}},
GridLines -> {None, means1}, PlotLabel -> TableForm[{means1, means2},
TableHeadings -> {{"means", "trimmedmeans"}, {"data1", "data2", "data3"}}],
ChartStyle -> 1, ImageSize -> 400];
Row[{bwc, bwc /. With[{sel = Select[Cases[bwc, _LineBox, Infinity],
Not[FreeQ[#, Alternatives @@ means1]] &]},
Thread[sel -> ( sel /. Thread[means1 -> means2])]]}]