Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用带异常值的Matplotlib手动绘制方框图_Python_Matplotlib_Boxplot - Fatal编程技术网

Python 使用带异常值的Matplotlib手动绘制方框图

Python 使用带异常值的Matplotlib手动绘制方框图,python,matplotlib,boxplot,Python,Matplotlib,Boxplot,通过提到这一点,我想画一个方框图,给出五个数字的摘要和异常值 这个问题的答案是针对多个方框图的,我修改了代码以适合单个方框图 这是我尝试的代码: def自定义箱线图(迷你、q1、q2、q3、maxm、*异常值): """ 输入: 分为不同参数的五个数字摘要; 摘要后面的以下参数是异常值。 输出: 控制台中绘制的箱线图。 """ 图=plt.图(图尺寸=(8,8)) ax=plt.gca() bp=plt.boxplot([mini,q1,q2,q3,maxm]) 传单=bp[“传单”] 对于异常

通过提到这一点,我想画一个方框图,给出五个数字的摘要和异常值

这个问题的答案是针对多个方框图的,我修改了代码以适合单个方框图

这是我尝试的代码:

def自定义箱线图(迷你、q1、q2、q3、maxm、*异常值):
"""
输入:
分为不同参数的五个数字摘要;
摘要后面的以下参数是异常值。
输出:
控制台中绘制的箱线图。
"""
图=plt.图(图尺寸=(8,8))
ax=plt.gca()
bp=plt.boxplot([mini,q1,q2,q3,maxm])
传单=bp[“传单”]
对于异常值中的v:
传单[0]。设置(扩展数据=1,ydata=v)
_all=[mini、q1、q2、q3、maxm]+列表(异常值)
_最小值,_最大值=最小值(_全部),最大值(_全部)
ax.set_ylim([_min*0.9,_max*1.1])
figure.canvas.draw()
然而,当我试着用下面这句话跑步时

custom_箱线图(43.2,43.5,51.05,56.8,69.3,13.8,21.2)
它只输出上一个参数中的一个异常值的方框图。我希望在框形图中为
13.8
21.2
绘制两个异常值数据点

我相信错误就在这附近:

。。。
对于异常值中的v:
传单[0]。设置(扩展数据=1,ydata=v)
...
我明白,因为我只有一个箱线图,所以我可以像订阅
fliers[0]
一样从箱线图中获取第一个框
xdata=1
因为我再次为第一个框设置此值,然后为设置异常值的y值设置
ydata=v
。 我的代码中的错误在哪里?

让我们试试这个:

def custom_boxplot(mini, q1, q2, q3, maxm, *outliers):
    """
    Input: 
        Five-number summary separated into different arguments;
        The following arguments after the summary are the outliers.
    Output:
        A boxplot drawn in the console.
    """
    figure = plt.figure(figsize=(8,8))
    ax = plt.gca()
    bp = plt.boxplot([mini, q1, q2, q3, maxm])
    fliers = bp['fliers']
    fliers[0].set(xdata = [1]*len(outliers), ydata = outliers)
    _all = [mini, q1, q2, q3, maxm] + list(outliers)
    _min, _max = min(_all), max(_all)
    ax.set_ylim([_min*0.9, _max*1.1])
输出:


因此
xdata
ydata
可以接受多个异常值的数组。我试过
ydata=outliers
,它也奏效了。
ydata=[*异常值]
的具体原因是什么?