Histogram with Boxplot above in Python

前端 未结 2 439
臣服心动
臣服心动 2021-01-31 11:38

Hi I wanted to draw a histogram with a boxplot appearing the top of the histogram showing the Q1,Q2 and Q3 as well as the outliers. Example phone is below. (I am using Python an

相关标签:
2条回答
  • 2021-01-31 12:12
    import numpy as np
    import seaborn as sns
    import matplotlib.pyplot as plt
    
    sns.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)
    

    0 讨论(0)
  • 2021-01-31 12:34

    Expanding on the answer from @mwaskom, I made a little adaptable function.

    import seaborn as sns
    def 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")
    

    Image

    0 讨论(0)
提交回复
热议问题