3
$\begingroup$

I have a set of data that I want to create a histogram for. The thing is, I would like to set the center of the histogram to the mean of the dataset and the intervals to be the standard deviation. How would I go about specifying this in Mathematica?

Just for the sake of it, this is my dataset and all I have in Mathematica so far:

Histogram[{0, 0, 0, 0, 80, 100, 120, 130, 130, 140, 140, 150, 150, 160, 170, 200, 220, 240, 350}]
$\endgroup$

2 Answers 2

3
$\begingroup$

Perhaps:

data = {0, 0, 0, 0, 80, 100, 120, 130, 130, 140, 140, 150, 150, 160, 170, 200, 220, 240, 350};
{mean, std} = Through@{Mean, StandardDeviation}@data;

You can specify the bin delimiters as an explicit list:

bins = {Table[mean + k std, {k , -5/2, 5/2, 1}]};

Histogram[data, bins, Epilog -> {PointSize[Large], Red, Point@{mean, 0}}]

enter image description here

Alternatively, you can use the form {xmin,xmax, dx} for bin specification:

bins2 = {mean - 5/2 std, mean + 5/2 std, std};
Histogram[data, bins2, Epilog -> {PointSize[Large], Red, Point@{mean, 0}}]
(* same picture *)
$\endgroup$
1
$\begingroup$

You can use this binning function to avoid having to recalculate the mean and standard deviation if the data changes, or manually decide on how many standard deviations to include.

binFunction[l_List] := 
 Module[{μ = Mean[l], σ = StandardDeviation[l]}, 
  Mean[l] - σ/2 + σ Range[Floor[Min[(l - μ)/σ]], 
     Ceiling[Max[(l - μ)/σ]]]]

Example of usage:

data = RandomVariate[StudentTDistribution[Pi], 1000];
Histogram[data, binFunction, Epilog -> {Red, Point[{Mean[data], 0}]}]

If you always want the plot to have equal range on either side of the mean, regardless of the distribution shape, use this function instead:

binFunctionSymmetric[l_List] := 
 Module[{μ = Mean[l], σ = StandardDeviation[l]}, 
  Mean[l] - σ/2 + σ Range[-#, +#] &@
   Ceiling[Max[Abs[(l - μ)/σ]]]]
$\endgroup$
2
  • $\begingroup$ I think this solution can be made identical to the first one by just sliding the range in binFunction by σ/2. In fact, I edited the solution to that effect. $\endgroup$
    – FACamargo
    Sep 23, 2016 at 11:00
  • $\begingroup$ @FACamargo To me it's not clear from the question which alignment is preferred (personally I'd prefer the bin divisions to line up with the standard deviations); but, seeing the accepted answer it looks like you're right, thanks for the edit! $\endgroup$ Sep 23, 2016 at 12:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.