# How to draw ranges in a plot?

I wanna do some plot but I do not know what Mathematica function is best. I wanna draw a 2D plot. Per point in the x Axis I wanna draw ranges, like in the picture I attach You might think about adding error plots, but I do not have central values. These are not errors. I just want the ranges. How is this best implemented?

• Graphics, Line together with a List of coordinates. Jun 25, 2018 at 10:40

ranges = RandomReal[10, {10, 2}];
ListPlot[Transpose[ranges],
Filling -> {1 -> {{2}, Directive[Thick, Red]}},
PlotStyle -> None]


if I want the bars to be located at x=1,5,7,12,20,22,30,39,49,51

To specify horizontal coordinates, you can use

ranges = RandomReal[10, {10, 2}];
xvalues = {1, 5, 7, 12, 20, 22, 30, 39, 49, 51};
Filling -> {1 -> {{2}, Directive[Thick, Red]}}, PlotStyle -> None]


You can also do it without the Filling option:

ListLinePlot[Thread /@ Transpose[{xvalues, ranges}],
PlotStyle -> Directive[Red, Thick]]


same picture

Alternatively, you can use Graphics:

Graphics[{Thick, Red, Line[Thread /@ Transpose[{xvalues, ranges}]]},
Axes -> True, AxesOrigin -> {0, 0}, AspectRatio -> 1 / GoldenRatio]


same picture

• kglr , I will like to know which version of Methemetica are you using, I Have 11.1.0 and if copy and paste your solution I have not any plot only axes, If I remove PlotStyle -> None I get the lines with dots blue and red on both extremes of lines. Jun 25, 2018 at 12:10
• @AnxonPués, I am using v9. I updated with a variant the works both in version 11.3 and version 9.
– kglr
Jun 25, 2018 at 12:14
• thanks it's ok now, I learn with your solutions Jun 25, 2018 at 12:24
• Thanks! this works. Nonetheless, if I wanna specify the position of the x axis , what is the proper syntax? For instance, In your example, if I want the bars to be located at x=1,5,7,12,20,22,30,39,49,51 ? Jun 25, 2018 at 12:25
• @PhoenixPerson, please see the update
– kglr
Jun 25, 2018 at 13:08

Here is @kglr's idea but different set up.

ranges1 = RandomReal[10, 10];
ranges2 = RandomReal[10, 10];
ListPlot[{ranges1, ranges2},
Filling -> {1 -> {{2}, Directive[Thick, Red]}}, PlotStyle -> None]


xvalues = {1, 5, 7, 12, 20, 22, 30, 39, 49, 51};
ranges1 = Transpose@{xvalues, RandomReal[10, 10]};
ranges2 = Transpose@{xvalues, RandomReal[10, 10]};
ListPlot[{ranges1, ranges2},
Filling -> {1 -> {{2}, Directive[Thick, Red]}}, PlotStyle -> None]


Take a look at ErrorListPlot and ErrorBar. ErrorListPlot takes the same options as ListPlot so you can customize is as you want.

load the ErrorBar Plotting Package first

Needs["ErrorBarPlots"]

ErrorListPlot[{{2, 0.4}, {1, 0.4}, {3, 0.4}},
PlotRange -> {{0, 4}, {0, 4}}]


The same result with the different syntax:

ErrorListPlot[{{{1, 2}, ErrorBar[0.4]}, {{2, 1},
ErrorBar[0.4]}, {{3, 3}, ErrorBar[0.4]}},
PlotRange -> {{0, 4}, {0, 4}}]


• ErrorBar is not needed: ErrorListPlot[{{1, 2, 0.4}, {2, 1, 0.4}, {3, 3, 0.4}}, PlotRange -> {{0, 4}, {0, 4}}]. Jun 25, 2018 at 21:35

Generally, for plots of this type, for readers of the chart that understand statistics, they would prefer you use the BoxWhiskerChart command, to embed some of the statistics of the data in the plots.

Here's the example from the manual page for BoxWhiskerChart:

In[1]:=  data = Table[RandomVariate[NormalDistribution[\[Mu], 1], 100], {\[Mu], {0, 3, 2, 5}}];

In[2]:= BoxWhiskerChart[data]
`