I would like to know what are the common techniques to compare two histograms? I have histogram of two images and I want to see are they similar or not meaning that is there any correlation between them or not. The histograms are for two different parts of tissue.

enter image description here


3 Answers 3


If you understand a graphical technique under ''comparison'' you should probably try a QQ-plot (qqplot under R).

If you are thinking of an analytical way (i.e. statistical test), the two-sample Kolmogorov-Smirnov test is the most classical way (ks.test under R). There are other, more modern goodness-of-fit tests (this is how your task called statistically, this case in a two-sample sense) available, such as Anderson-Darling test (ad.test from the package kSamples).

You might also consider binning the data (with cut) and then performing a $\chi^2$-squared test (chisq.test).

(If you don't want to compare the whole distribution, just some characteristics, such as the mean or variance, you get back to elementary statistical tests. Also note that the above was a non-parametrical approach; if you're willing to assume some functional form for the distributions, you can also use classical tests.)

Note that for very large sample sizes (which might be the case judging from your histogram) you will likely obtain significant results from every test. (They'll have extremely high power, detecting even minuscule deviations from the null.) In that case, graphical techniques (QQ-plot) might be still useful to decide how large is the deviation.

  • $\begingroup$ I have one question should I plot qqplot for horizontal value or vertical value meaning x value or y value ? $\endgroup$
    – user59419
    Commented Aug 18, 2014 at 7:54
  • $\begingroup$ The two parameter of qqplot is the two sample you have, i.e. a vector of the values (ranging from 0 to 1 if I see your histogram correctly). Whether you use qqplot(x,y) or qqplot(y,x) doesn't really matter, the two plot will be mirrored. $\endgroup$ Commented Aug 18, 2014 at 9:23
  • $\begingroup$ I thought qqplot(x1,x2) means x1 is from one sample and x2 is from the other and not x and y of the same histogram.is that right? $\endgroup$
    – user59419
    Commented Aug 18, 2014 at 10:32
  • $\begingroup$ @user59419 : Yes, x1 is the data behind the red histogram on the image you posted, x2 is the data behind the blue histogram (or the other way around). $\endgroup$ Commented Aug 18, 2014 at 10:41

Some common measures of histogram discrepancy or agreement include

Earth mover's distance

Bhattacharyya distance

Chi-square distance, $d(x,y) = \frac{1}{2}\sum_i \frac{(x_i-y_i)^2}{x_i+y_i}$

Kullback-Leibler divergence

There are many others.

  • $\begingroup$ Very good point indeed. These can be used to quantify the similarity (if you need numerical ''answer'' to that question). $\endgroup$ Commented Aug 18, 2014 at 10:53
  • $\begingroup$ @Tamas Once you have a statistic/measure that gives an ordering (histogram B is more like histogram A than histogram C is), you can have a test of equality based off it (e.g. a permutation/randomization test). $\endgroup$
    – Glen_b
    Commented Aug 18, 2014 at 11:19

you may use Hassanat distance, http://arxiv.org/ftp/arxiv/papers/1409/1409.0923.pdf it is invariant to the scale of the histograms, i.e. if you have 2 histograms came from different image sizes, the final distance is not affected much, also it is not affected by outliers, as the distance of each bin is bounded between [0,1].




Your Answer

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

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