Histogram
Seaborn basics
2 min read
Published Oct 7 2025, updated Aug 17 2026
Guide Sections
Guide Comments
seaborn.histplot() visualises the distribution of one or two numerical variables using histograms (and optionally KDE curves).
Syntax:
sns.histplot( data=None, x=None, y=None, hue=None, stat="count", bins="auto", binwidth=None, discrete=False, cumulative=False, common_bins=True, common_norm=True, multiple="layer", element="bars", fill=True, shrink=1, kde=False, palette=None, ax=None, **kwargs)Parameters:
data= DataFrame containing datax,y= Variables for histogram axeshue= Colour by categorystat= What the height of bars represents: "count", "frequency", "probability", "percent", "density"bins= Number of bins or bin edgesbinwidth= Width of each binmultiple= How hue groups are displayed ("layer", "stack", "dodge", "fill")element= "bars", "step", or "poly" for different visual stylesfill= Whether to fill the barskde= Add a kernel density estimate curvepalette= Colour schemediscrete= If True, treats x as categorical/discrete valuescumulative= If True, shows cumulative countsshrink= Adjusts bar width when multiple hue categories are used
Basic example
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.histplot(data=tips, x="total_bill")plt.show()Creates a simple histogram showing how total_bill values are distributed.

Add a KDE curve (smoothed distribution)
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.histplot(data=tips, x="total_bill", kde=True)plt.show()Adds a smooth density curve to visualise the probability distribution.

Color by category (hue)
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.histplot(data=tips, x="total_bill", hue="sex", palette="Set2")plt.show()Different colours for each group (male vs. female).

Display hue groups separately
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.histplot( data=tips, x="total_bill", hue="sex", multiple="dodge", shrink=0.8, palette="pastel")plt.show()Options for multiple:
"layer"= Overlays bars (default)"dodge"= Side-by-side bars"stack"= Stacks bars on top of each other"fill"= Stacks but normalises to 100% height

Adjust number or width of bins
Control how detailed the histogram is.
Number of bins:
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.histplot(data=tips, x="total_bill", bins=20)plt.show()
Width of bins:
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.histplot(data=tips, x="total_bill", binwidth=5)plt.show()
Normalise or change stat type
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.histplot(data=tips, x="total_bill", stat="percent", bins=20)plt.show()Bar height shows percentages instead of raw counts.
Options for stat:
"count"(default)"frequency""probability""percent""density"

2D histogram (Bivariate Distribution)
You can plot two numeric variables with both x and y.
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.histplot(data=tips, x="total_bill", y="tip")plt.show()Creates a 2D histogram (heatmap-like) plot showing joint frequency.

Add hue with 2D data
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.histplot(data=tips, x="total_bill", y="tip", hue="sex", palette="coolwarm")plt.show()Adds color separation by category.

Change style
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.histplot( data=tips, x="total_bill", hue="sex", element="step", fill=False, palette="Set1")plt.show()Options for element:
"bars"= Default filled bars"step"= Outlined (no fill)"poly"= Polygon-style shape

Discrete variable histogram
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.histplot(data=tips, x="size", discrete=True)plt.show()Ensures each category/bin is represented individually.

Cumulative distribution
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.histplot(data=tips, x="total_bill", cumulative=True)plt.show()Bars accumulate counts progressively from left to right.

Logarithmic scale
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.histplot(data=tips, x="total_bill", log_scale=True)plt.show()Useful when data spans several orders of magnitude.

Combine with KDE plot for clarity
import seaborn as snsimport matplotlib.pyplot as plttips = sns.load_dataset("tips")sns.histplot(data=tips, x="total_bill", kde=True, bins=20, color="skyblue")plt.show()Combines discrete histogram bars and smooth density curve.
