Histogram with Boxplot above in Python
import numpy as npimport seaborn as snsimport matplotlib.pyplot as pltsns.set(style="ticks")x = np.random.randn(100)f, (ax_box, ax_hist) = plt.subplots(2, sharex=True, gridspec_kw={"height_ratios": (.15, .85)})sns.boxplot(x, ax=ax_box)sns.distplot(x, ax=ax_hist)ax_box.set(yticks=[])sns.despine(ax=ax_hist)sns.despine(ax=ax_box, left=True)
Expanding on the answer from @mwaskom, I made a little adaptable function.
import seaborn as snsdef histogram_boxplot(data, xlabel = None, title = None, font_scale=2, figsize=(9,8), bins = None): """ Boxplot and histogram combined data: 1-d data array xlabel: xlabel title: title font_scale: the scale of the font (default 2) figsize: size of fig (default (9,8)) bins: number of bins (default None / auto) example use: histogram_boxplot(np.random.rand(100), bins = 20, title="Fancy plot") """ sns.set(font_scale=font_scale) f2, (ax_box2, ax_hist2) = plt.subplots(2, sharex=True, gridspec_kw={"height_ratios": (.15, .85)}, figsize=figsize) sns.boxplot(data, ax=ax_box2) sns.distplot(data, ax=ax_hist2, bins=bins) if bins else sns.distplot(data, ax=ax_hist2) if xlabel: ax_hist2.set(xlabel=xlabel) if title: ax_box2.set(title=title) plt.show()histogram_boxplot(np.random.randn(100), bins = 20, title="Fancy plot", xlabel="Some values")
def histogram_boxplot(feature, figsize=(15,10), bins=None): f,(ax_box,ax_hist)=plt.subplots(nrows=2,sharex=True, gridspec_kw={'height_ratios':(.25,.75)},figsize=figsize) sns.distplot(feature,kde=False,ax=ax_hist,bins=bins) sns.boxplot(feature,ax=ax_box, color='Red') ax_hist.axvline(np.mean(feature),color='g',linestyle='-') ax_hist.axvline(np.median(feature),color='y',linestyle='--')