Place PlotMarkers in front of error bars with ErrorListPlot

The most obvious ...

data = {{#1, #2}, ErrorBar[#3]} & @@@ RandomReal[1, {10, 3}];
Needs["ErrorBarPlots`"]
Show[ErrorListPlot[data, PlotRange -> All, 
                         BaseStyle -> AbsoluteThickness[2], 
                         PlotStyle -> RGBColor[159/255, 158/255, 204/255], 
                         PlotMarkers -> None], 
     ListPlot[data[[All, 1]], 
                         PlotStyle -> Directive[PointSize[Medium], Red]]]

Mathematica graphics


1

A little improvement of Your approach would be using Point instead of Disk:

ErrorListPlot[data, PlotRange -> All, PlotStyle -> Orange,  PlotMarkers -> None,
              Epilog -> ({Darker@Blue, [email protected], Point@data[[All, 1]]})],
              BaseStyle -> AbsoluteThickness[2]]

enter image description here

2

Not so obvious and I'm not sure if universal for ErrorListPlot but:

plot = ErrorListPlot[data, PlotRange -> All, BaseStyle -> AbsoluteThickness[2],   
                 PlotMarkers -> {{Graphics@{Opacity[1], Darker@Blue, Disk[]}, 0.01 5}},
                 PlotStyle -> Orange];

plot// Replace[#, k_List :> Reverse@k, {6}] &

enter image description here

less handy but more safe(?):

plot /. GraphicsComplex[x_, y_, z___] :> 
        GraphicsComplex[x, Replace[y, k_List :> Reverse@k, {3}], z]

You can also post-process ErrorListPlot output to move the Insets after the Lines:

ClearAll[markersInFront]
markersInFront = # /. {i_Inset, x__} :> {x, i} &;

Examples:

elplt = ErrorListPlot[data, PlotRange -> All, 
   BaseStyle -> AbsoluteThickness[2],  ImageSize -> 400,
   PlotStyle -> RGBColor[159/255, 158/255, 204/255], 
   PlotMarkers -> {{Graphics@{Opacity[1], Darker@Blue, Disk[]},  0.01 5}}];

Row[{elplt, markersInFront @ elplt}]

enter image description here

Using PlotMarkers -> {Show[PolyhedronData["Dodecahedron"], Boxed -> False, ImageSize -> 30]} in elplt above, we get enter image description here

Notes: Both examples above work fine in Version 9.2. As noted by @Alexey Popkov in a comment:

  1. In version 11.2, we need to use PlotMarkers->{{Show[PolyhedronData["Dodecahedron"],Boxed->Fa‌​lse,ImageSize->30],.‌​1}}.
  2. In version 10.2+, we need to use Show[elplt, PlotRange -> All] and Show[markersInFront @ elplt, PlotRange -> All] to avoid cropping of some error bars (See also this Q/A on this issue.)