在Python中使用Boxplot的直方图

时间:2015-10-28 01:21:58

标签: python matplotlib histogram boxplot seaborn

您好我想绘制一个直方图,其中显示直方图顶部的箱线图,显示Q1,Q2和Q3以及异常值。示例电话如下。 (我使用的是Python和Pandas) enter image description here

我已经使用matplotlib.pyplot检查了几个例子,但几乎没有一个很好的例子。我还希望直方图曲线如下图所示。 enter image description here

我也试过了seaborn,它为我提供了直方图的形状线,但没有找到一种方法与它上面的boxpot结合。

任何人都可以通过matplotlib.pyplot或使用pyplot

来帮助我

3 个答案:

答案 0 :(得分:13)

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)

enter image description here

答案 1 :(得分:0)

扩展了@mwaskom的答案,我做了一些适应性强的功能。

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

答案 2 :(得分:-1)

<q-input
    filled
    :value="text"
    :label="label"
    lazy-rules
    style="width: 250px"
    :rules="[(val) => (val && val.length > 0) || 'Required']"
    @input="$emit('update:text', $event)"
  />