A manual reordering of input data and using `Callout` with explicit positions for labels in the setting of `PlotLabels`: slopes = Sort@Table[i Round[Abs[Sin[i]], 0.1], {i, 1, 5, 0.2}]; mydata = Table[Select[Table[{x, 1 + slope * x^2}, {x, 1, 10, 0.1}], #1[[2]] <= 100 &], {slope, slopes}]; ordering ={1,2,21,20,19,18,17,16,15,14,13,11,12,3,4,10,9,8,7,6,5}; mydataordered = mydata[[ordering]]; slopesordered = slopes[[ordering]]; sc = 100/21; xpos = 12; ListPlot[mydataordered, PlotLabels -> MapIndexed[Callout[#,{xpos, 5 + sc(#2[[1]]-1)}, mydataordered[[All,-1]][[#2[[1]]]], LeaderSize -> {{Automatic, Automatic, 0}, {30, 0 Degree}}]&, slopesordered], ImagePadding -> {{Automatic,200}, { Automatic, Automatic}}, ImageSize -> 800, PlotRangeClipping -> False] [![enter image description here][1]][1] [1]: https://i.sstatic.net/8bqfN.png