# Use MATLAB to create beautiful, custom violin plots

## One of the most desired plot types, a favorite of R users, is the violin or half-violin. In this post I show how to accomplish this in MATLAB using two built-in functions: **ksdensity** and **patch**.

## Has this ever happened to you?

You have some great data for a boxplot, but you also want to view the distributions. Your supervisor suggests something called a violin, but you’re a MATLAB native and the last time you saw a violin was in your high school orchestra section. So you go looking:

There are some homemade solutions on the MathWorks page, but in general they don’t have the same aesthetic as what you’d see from an R package.

# Here I will guide you through making a very basic half-violin, and a more complex example follows

**Step 1:** Create some fake data. We’ll create data that is a combination of two Gaussian distributions, with means at 0 and 10, and standard deviations of 5 and 1.

rng(5)mu = [0,10];

sigma = [5,0;0,1];

gm = gmdistribution( mu,sigma );

data = random(gm,30);

data = data(:);

**Step 2:** Create a kernel density function from your data, which is at the heart of those lovely half-violins.

xvalues = linspace( prctile(data,1), prctile(data,99), 100 );[f,xi] = ksdensity( data(:),xvalues,'Bandwidth',1,'BoundaryCorrection','reflection');

**Step 3: **Use **patch** for displaying it, and viola (or should we say, violin!)

`figure; patch( 0-[f,zeros(1,numel(xi),1),0],[xi,fliplr(xi),xi(1)],'r' )`

**Tip: If your graph looks like it’s filling up the whole plot box, try adjusting the value of ‘Bandwidth’ in the ksdensity command.**

By resizing the window, you can actually configure how the plot looks (which is one of the biggest advantages of plotting with MATLAB over R or Jupyter, in my opinion).

Now you understand the basics of plotting the violin using **ksdensity** and **patch. **In the gist below, I lay out how to generate the graph in the top panel. If you want to fully understand all the code I recommend you check out my other posts about how to grab objects in a figure, as well as arrayfun and patch.