Plotting histogram overlayed with kernel estimator

I would like to plot a KDE from KernelDensity onto the frequency histogram of the corresponding raw data. Is this possible? Can you provide example code, if so?

Thanks!

Joffre

2 Answers



0



Hi Joffre,

It is possible to overlay a histogram onto a KDE of the corresponding raw data. The easiest way to do this is to:

  1. Plot the KDE using the kernelDensity function.
  2. Add overlay the histogram using the plotAddHistF function.
/*
** Loadd data
*/
fname = getGAUSSHome("examples/winevolatileacidity.csv");
dataset = loadd(fname);

// Example One:
// Full sample normal density
struct kernelDensityResults krslt1;
krslt1 = kernelDensity(dataset[., "volatile acidity"]);

// Add histogram of raw data
// using frequencies with 50 bins
plotAddHistF(dataset[., "volatile acidity"], 50);

Note that this will plot the histogram on the same y-axis as the KDE. For better appearance, you can use a plotControl structure to plot the histogram on the right y-axis:

/*
** Loadd data
*/
fname = getGAUSSHome("examples/winevolatileacidity.csv");
dataset = loadd(fname);

// Full sample normal density
struct kernelDensityResults krslt1;
krslt1 = kernelDensity(dataset[., "volatile acidity"]);

// Use plot control structure to plot 
// new graph on right axis
struct plotControl ctl;
ctl = plotGetDefaults("bar");

// Specify to plot histogram
// on right y-axis
plotSetWhichYAxis(&ctl, "right");

// Add histogram of raw data
// using frequency with 100 bins
plotAddHist(ctl, dataset[., "volatile acidity"], 50);

Eric

105


0



Eric, thank you! This is very helpful, particularly the second example. That solves the messy scaling issue across the empirical distribution and the kernel function.

Joffre

Your Answer

2 Answers

0

Hi Joffre,

It is possible to overlay a histogram onto a KDE of the corresponding raw data. The easiest way to do this is to:

  1. Plot the KDE using the kernelDensity function.
  2. Add overlay the histogram using the plotAddHistF function.
/*
** Loadd data
*/
fname = getGAUSSHome("examples/winevolatileacidity.csv");
dataset = loadd(fname);

// Example One:
// Full sample normal density
struct kernelDensityResults krslt1;
krslt1 = kernelDensity(dataset[., "volatile acidity"]);

// Add histogram of raw data
// using frequencies with 50 bins
plotAddHistF(dataset[., "volatile acidity"], 50);

Note that this will plot the histogram on the same y-axis as the KDE. For better appearance, you can use a plotControl structure to plot the histogram on the right y-axis:

/*
** Loadd data
*/
fname = getGAUSSHome("examples/winevolatileacidity.csv");
dataset = loadd(fname);

// Full sample normal density
struct kernelDensityResults krslt1;
krslt1 = kernelDensity(dataset[., "volatile acidity"]);

// Use plot control structure to plot 
// new graph on right axis
struct plotControl ctl;
ctl = plotGetDefaults("bar");

// Specify to plot histogram
// on right y-axis
plotSetWhichYAxis(&ctl, "right");

// Add histogram of raw data
// using frequency with 100 bins
plotAddHist(ctl, dataset[., "volatile acidity"], 50);

0

Eric, thank you! This is very helpful, particularly the second example. That solves the messy scaling issue across the empirical distribution and the kernel function.

Joffre


You must login to post answers.

Have a Specific Question?

Get a real answer from a real person

Need Support?

Get help from our friendly experts.