# Make a histogram by giving the range and height of each bin one by one

I got the data of each bin by measurements like {start, end, height} and I want something like this picture: I have no other data for the Histogram[], just what you can see on the linked picture. So any ideas how to do this in Mathematica (version 9)?

(The whole thing is for fitting a distibution curve on it.)

Generate the test data:

points = 10;
SeedRandom;
xi = Sort[Table[n + RandomReal[{-.2, 1.5}], {n, points + 1}]]
yi = RandomReal[{1, 5}, points]
data = Table[{xi[[i]], xi[[i + 1]], yi[[i]]}, {i, Length[yi]}]


This creates the data in the format $\{start,end,height\}$. Draw the plot:

ListPlot[data[[All, {2, 3}]], PlotStyle -> None,
Prolog -> {Opacity, EdgeForm[Black],
Rectangle[{#[], 0}, {#[], #[]}] & /@ data},
AxesOrigin -> {0, 0}] • Graphics[{Opacity, EdgeForm[Black], Rectangle[{#[], 0}, {#[], #[]}] & /@ data}, Frame -> True] Aug 26, 2019 at 0:41

First I'll generate some data in {start,end,height} format. This data is drawn from a standard normal distribution.

data = Partition[Flatten[Transpose[{Thread[{Most[#[]], Rest[#[]]}], #[]}]], 3] &
[HistogramList[RandomReal[NormalDistribution[], 100], Automatic, "PDF"]]


Now you could try using a combination of explicit binning and a height function.

hfun[bins_, counts_] := counts
x = Union[Flatten[data[[All, 1 ;; 2]]]];
h = data[[All, -1]];
Histogram[x, {x}, hfun[#, h] &] Suppose you want to compare it to the underlying distribution.

Show[Histogram[x, {x}, hfun[#, h] &],
Plot[PDF[NormalDistribution[], t], {t, -3, 3}], PlotRange -> All] Edit:

In this particular case I assume normalized heights because I generated them with HistogramList and the setting "PDF". If this is not the case you may need to normalize them yourself. This can be accomplished by replacing h with hnorm in Histogram where hnorm is given by

hnorm = h/Differences[x].h


Using the data generated in @shrx's answer:

bins = DeleteDuplicates@Flatten@data[[All, ;; 2]];
heights = data[[All, 3]];
Histogram[{0}, {bins}, ( heights &), Axes -> False,  Frame -> True, You can also use RectangleChart after some processing of data:
RectangleChart[Prepend[{Subtract[#2, #], #3} & @@@ data, { data[[1, 1]], 0}], 