Tutorial7 min read

How to Make a Violin Plot in Excel (And Why You Shouldn't)

By Francesco Villasmunta
How to Make a Violin Plot in Excel (And Why You Shouldn't)

Need to create a violin plot in Excel? You've probably discovered Excel doesn't have a built-in violin chart type. Here's the workaround—and a much faster alternative.

⚡ Skip the Excel Headache

Create a publication-ready violin plot in 30 seconds. No formulas, no workarounds.

Create Violin Plot Free →

Can You Make a Violin Plot in Excel?

Technically yes, but Excel doesn't support violin plots natively. You'll need to:

  1. Calculate kernel density estimation (KDE) manually
  2. Create mirrored data series
  3. Use stacked area charts as a workaround
  4. Spend 30+ minutes formatting

How to Make a Violin Plot in Excel (Step-by-Step)

Step 1: Calculate the Kernel Density Estimation (KDE)

This is where most people give up. Excel doesn't have a KDE function. You'll need to:

  1. Create bins for your data range (e.g., 20-30 bins spanning your min to max values)
  2. Use the FREQUENCY array formula to count data points in each bin
  3. Apply a Gaussian smoothing formula manually, or approximate with a moving average

Step 2: Create Mirrored Series

To get the symmetric "violin" shape:

  • Right Side: The positive calculated density values
  • Left Side: The negative of those values (multiply by -1)

Step 3: Create a Stacked Area Chart

Insert a "Stacked Area Chart" and add your positive and negative series. You should see a shape that vaguely resembles a violin.

Step 4: Rotate and Format

Most violin plots are vertical, but Excel's area charts are horizontal. You'll need to:

  • Swap your axes (or use an XY Scatter chart with filled curves)
  • Remove gridlines and axis labels
  • Manually overlay a box plot for summary statistics
  • Spend another 20+ minutes on formatting

⚠️ Reality Check

This process typically takes 1-2 hours, the result often doesn't look publication-ready, and if your data changes, you have to start over. There's a better way.

The Plotivy Way: Violin Plot in 30 Seconds

Here's how to create an Excel violin plot alternative that's actually publication-ready:

3 Simple Steps:

  1. Upload your Excel file directly to Plotivy (or paste your data)
  2. Type: "Make a violin plot comparing Column A by Group Column B"
  3. Download your publication-ready figure (PNG, SVG, or PDF at 300 DPI)

Plotivy uses Python's seaborn library under the hood, which performs mathematically accurate Kernel Density Estimations automatically. You get:

  • ✅ Accurate statistical representation
  • ✅ Embedded box plots showing quartiles and outliers
  • ✅ Publication-ready styling (Nature, Science, Cell compliant)
  • ✅ Easy customization through natural language

Ready to save 2 hours?

Create a real violin plot in 30 seconds. Free, no signup required.

Make Violin Plot Now →

Why Use Violin Plots at All?

Violin plots show the full distribution shape of your data—something box plots hide. They're essential when:

  • Your data might be bimodal (two peaks)
  • You're comparing distributions between groups
  • Reviewers expect to see the data distribution, not just summary statistics

Learn more: What is a Violin Plot and When Should You Use It?

Chart gallery

Gallery starters for distribution plots

One-click prompts and images for violin, box, and density plots you can regenerate instantly.

Browse all chart types →
Violin plot comparing score distributions across 3 groups with inner box plots
Distributionseaborn, matplotlib
From the chart galleryComparing treatment effects across groups

Violin Plot

Combines box plots with kernel density to show distribution shape across groups.

Sample code / prompt

Create a violin plot comparing 'Exam Scores' across 3 treatment groups: Control, Treatment A, and Treatment B. Generate realistic educational data with 50 students per group. Control: mean=72, sd=12 (normal). Treatment A: mean=78, sd=10 (slight improvement). Treatment B: mean=82, sd=8 (significant improvement, less variance). Include embedded box plots showing quartiles, median line, and mean diamond marker. Add individual data points as a strip plot with jitter (alpha=0.3). Perform and annotate ANOVA p-value. Use distinct colors for each group. Add horizontal reference line at passing score (70). Title: 'Effect of Study Interventions on Exam Performance'.
Box and whisker plot comparing gene expression across 4 genotypes with significance brackets
Distributionseaborn, matplotlib
From the chart galleryComparing experimental groups in scientific research

Box and Whisker Plot

Displays data distribution using quartiles, median, and outliers in a standardized format.

Sample code / prompt

Create a publication-ready box plot comparing 'Gene Expression Levels' (normalized counts) across 4 genotypes: WT (Wild Type), KO1 (Knockout 1), KO2 (Knockout 2), and Mutant. Generate a realistic dataset with n=20 biological replicates per group, with KO1 showing upregulation (~1.5x WT), KO2 showing downregulation (~0.8x WT), and Mutant showing moderate increase (~1.2x WT). Overlay jittered individual data points with transparency. Perform pairwise t-tests against WT control and add significance brackets with stars (* p<0.05, ** p<0.01, *** p<0.001, ns for non-significant). Use a colorblind-friendly palette, add y-axis label with units, and include sample size (n=) in x-axis labels.
Density plot showing distribution of test scores with shaded area
Distributionseaborn, matplotlib
From the chart galleryComparing distributions between groups

Density Plot

Visualizes the distribution of data over a continuous interval using kernel density estimation.

Sample code / prompt

Create a density plot (KDE) showing the distribution of 'SAT Scores' for 1000 students across 3 school districts. Generate realistic data: District A (urban, mean=1100, sd=150), District B (suburban, mean=1200, sd=120), District C (private, mean=1300, sd=100). Shade the area under each curve with semi-transparent fills using distinct colors. Add vertical dashed lines for each district's mean with annotations. Include a vertical line at the national average (1060). Add a rug plot showing individual observations (alpha=0.1). X-axis: 'SAT Score (400-1600)', Y-axis: 'Density'. Add legend with district names and sample sizes. Title: 'SAT Score Distribution by School District'.

Start Analyzing Today

You don't need to be a data scientist to analyze data like one. Try Plotivy and turn your data into insights in minutes.

Get Started for Free →
Tags:#excel#violin plot#violin plot excel#excel violin plot#violin chart in excel#violin plots in excel#how to make violin plot in excel#tutorial