Menu

Distribution Visualization

Stunning Violin Plots That Tell the Full Story

Violin plots reveal what box plots hide - the full shape of your distribution. Bimodality, skewness, and density are instantly visible. Plotivy creates them with overlaid box plots, jitter, and significance brackets.

Why Violin Plots Beat Box Plots

A box plot with identical quartiles can represent wildly different distributions. Violin plots show the full probability density - revealing bimodal patterns, heavy tails, and gaps that box plots completely miss.

Bimodality

Two peaks in the violin body reveal subpopulations - invisible in a box plot

Skewness

Asymmetric violin shape shows whether data leans left or right

Density

Wider sections = more data points at that value - intuitive reading

Live Code Lab: Violin + Box + Jitter

The best practice is to overlay a thin box plot and individual data points on top of the violin. This code demonstrates all three layers plus summary statistics.

Live Code Editor
Code EditorPython
Loading editor...
Live Preview

Preparing preview

Running once automatically on first load

Learn by Experimenting

This is a safe playground for learning! Try changing:

  • • Colors: Modify color values to see different palettes
  • • Numbers: Adjust sizes, positions, or data ranges
  • • Labels: Update titles, axis names, or legends

Edit the code, run it, then open the full data visualization tool to continue with your own dataset.

Bonus: Raincloud Plot

The raincloud plot is the most informative distribution chart - combining a half-violin, box plot, and individual points in a clean layout that avoids symmetry redundancy.

Live Code Editor
Code EditorPython
Loading editor...
Live Preview

Preparing preview

Running once automatically on first load

Learn by Experimenting

This is a safe playground for learning! Try changing:

  • • Colors: Modify color values to see different palettes
  • • Numbers: Adjust sizes, positions, or data ranges
  • • Labels: Update titles, axis names, or legends

Edit the code, run it, then open the full data visualization tool to continue with your own dataset.

Plotivy Violin Plot Features

Multi-layer visualization

Automatically combines violin + box + jitter + significance brackets in a single prompt.

Split violins

Compare two conditions within each group using side-by-side half-violins.

Bandwidth optimization

KDE bandwidth is automatically tuned for your sample size to avoid over-smoothing.

Journal-ready export

300+ DPI output with proper fonts and sizing matching Nature, Science, and Cell guidelines.

Chart gallery

Related Distribution Charts

More ways to visualize distributions

Browse all chart types →
Box and whisker plot comparing gene expression across 4 genotypes with significance brackets
Distribution•seaborn, matplotlib
From the chart gallery•Comparing experimental groups in scientific research

Box and Whisker Plot

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

Sample code / prompt

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats

# Generate gene expression data for 4 genotypes
np.random.seed(42)
genotypes = ['WT', 'KO1', 'KO2', 'Mutant']
n_per_group = 20
Histogram showing age distribution with 20 bins and KDE overlay
Distribution•matplotlib, seaborn
From the chart gallery•Analyzing age demographics

Histogram

Displays the distribution of numerical data by grouping values into bins.

Sample code / prompt

import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import gaussian_kde, skewnorm

# Generate age data with slight right skew
np.random.seed(42)
ages = skewnorm.rvs(a=2, loc=42, scale=15, size=500)
ages = np.clip(ages, 18, 80)  # Clip to realistic range

fig, ax = plt.subplots(figsize=(12, 7))
Scatter plot of height vs weight colored by gender with regression line
Statistical•matplotlib, seaborn
From the chart gallery•Correlation analysis between metrics

Scatterplot

Displays values for two variables as points on a Cartesian coordinate system.

Sample code / prompt

import matplotlib.pyplot as plt
import numpy as np
from scipy import stats
import pandas as pd

# Generate sample data
np.random.seed(42)
n_samples = 200
height = np.random.normal(170, 8, n_samples)
weight = height * 0.6 + np.random.normal(0, 8, n_samples) - 50
Bar chart comparing average scores across 5 groups with error bars
Comparison•matplotlib, seaborn
From the chart gallery•Comparing performance across categories

Bar Chart

Compares categorical data using rectangular bars with heights proportional to values.

Sample code / prompt

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy import stats

# Generate performance scores for 5 treatment groups
np.random.seed(42)
groups = ['Control', 'Treatment A', 'Treatment B', 'Treatment C', 'Treatment D']
n_samples = 30
Correlation heatmap with diverging color scale and coefficient annotations
Statistical•seaborn, matplotlib
From the chart gallery•Correlation analysis between variables

Heatmap

Represents data values as colors in a two-dimensional matrix format.

Sample code / prompt

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

# Create correlation matrix for financial metrics
metrics = ['Revenue', 'Profit', 'Expenses', 'ROI', 'Customers', 'AOV', 'Marketing', 'Employees']
correlation_data = np.array([
    [1.00, 0.85, -0.45, 0.72, 0.88, 0.65, 0.72, 0.55],
    [0.85, 1.00, -0.78, 0.92, 0.75, 0.58, 0.63, 0.48],

Show the Full Distribution, Not Just the Box

Upload your data and get publication-ready violin plots with overlaid statistics in seconds.