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=[*异常值]
的具体原因是什么?