Today I am going to show one of my function that I am using quite extensively in my work. It's plotLineHist and that's what it produces:

Well, what the heck is that? PlotLineHist take a cell array C, a matrix M, a function handle F, and several optional arguments. The cell array C is a nxm. You have to think of each row as being an experimental condition for one factor, and each column as the experimental condition for a second (optional) factor. The matrix M specifies the values for the row's factor ( λ in the figure). In the figure, each column's factor is represented by different colours.

PlotLineHist execute the function F (for example, @mean) for each cell of the cell array, plotting the resulting value and connecting the row's (continuous lines in the figure). It also calculates the standard error for each cell (vertical line on each marker).

However, the novelty is that it also plot a frequency distribution itself for each condition, and aligns it vertically on each row's factor. The distribution's value corresponds now to the vertical axis of the figure.

Each row distribution has a different colour. The first row's distribution is plotted on the left side, the others on the right (of course, having more than 3 row's condition will make the plot difficult to read, but it may still be useful in those cases).

If this sounds convoluted, I am sure you will get a better idea by a simple example.

Let's say that we are measuring the effect of a drug on cortisol level on a sample of 8 participants. We have just 1 factor, the horizontal one, which is drug dose: let's say 100mg, 200mg and 300mg. The cortisol level is found to be:

Patient N. | 100mg | 200mg | 300mg |
---|---|---|---|

1 | 10 | 15 | 20 |

2 | 12 | 16 | 23 |

3 | 13 | 14 | 15 |

4 | 13 | 14 | 15 |

5 | 20 | 17 | 20 |

6 | 50 | 30 | 21 |

7 | 12 | 15 | 19 |

8 | 14 | 14 | 23 |

Since we have only one factor, we need to put all the data in the first row of the cell array feed into the plotLineHist function:

p{1,1}=[10 12 13 20 50 12 14 12];

p{1,2}=[15 16 14 17 30 15 14 16];

p{1,3}=[20 23 15 20 21 19 23 23];

drugDose=[100 200 300];

fun=@nanmean;

plotLineHist(p, drugDose,fun);

The blue line with the markers indicates the mean response for each condition (with standard error). But then we also have a nice plot on the distribution for each condition! This allows us to spot some clear outliers in the first two distributions.

Now, let's say that we have two factor. For example, sometime the drug is taken together with another substance, and sometime is not.The drug is still given in 3 different dosages, 100, 200 and 300mg.

%example 2

%without substance A

p{1,1}=[10 12 13 20 50 12 14 12];

p{1,2}=[15 16 14 17 30 15 14 16];

p{1,3}=[20 23 15 20 21 19 23 23];

%with substance A

p{2,1}=[12 12 12 21 60 13 11 15];

p{2,2}=[16 16 14 18 31 19 18 17];

p{2,3}=[22 23 17 20 21 20 23 23];

drugDose=[100 200 300];

fun=@nanmean;

plotLineHist(p, drugDose,fun)

You can see how the second row condition distribution is positioned on the right side, so that the two distributions can be easily compared. Note how must of the nitty-gritty details are automatically calculated by the functions, such as bin width, scaling factors, etc. However, you have the chance to change it manually by using the optional arguments.

For me, this has been a very useful plot to summarize different types of information at the same time, without having a lot of figures.

Try it out and let me know!