在 python 的范围内似乎不可能获得您正在寻找的确切结果,这意味着这些属性充其量只能在 javascript 上下文中使用。
不过,关于胡须的放置,您仍然有一些选择。顺便说一句,你是对的1.5 * IQR
。从help(fig)
你可以找到:
默认情况下,胡须对应于盒子的边缘 +/- 1.5 倍的四分位间距(IQR:Q3-Q1),其他选项请参见“boxpoints”。
在下面boxpoints
你会发现:
如果为“异常值”,则仅显示位于晶须外的样本点 如果为“怀疑异常值”,则显示异常值并突出显示小于 4*Q1-3*Q3 或大于 4*Q3-3*Q1 的点 (请参阅outliercolor
)如果“全部”,则显示所有样本点如果为假,则仅显示没有样本点的框
所以对于不同的值
'boxpoints':False, 'all', outliers
你会得到:
正如您将在下面看到的,是否boxpoints
显示也将决定胡须的位置。因此,您可以在自定义函数中用作False, 'all', outliers
参数,至少能够在这些选项之间进行更改。从你的问题来看,boxpoints=False
应该不会离目标太远。
这是一种方法:
boxpoints 设置为 False 的代码:
# imports
from plotly.subplots import make_subplots
import plotly.graph_objs as go
import pandas as pd
import numpy as np
# data
np.random.seed(123)
y0 = np.random.randn(50)-1
x0 = y0
x0 = [0 for y in y0]
y0[-1] = 4 # include an outlier
# custom plotly function
def get_boxplot(boxpoints):
fig = go.Figure(go.Box(y=y0, boxpoints = boxpoints, pointpos = 0,
)
)
fig.show()
get_boxplot(boxpoints='outliers')
情节 1 - Boxpoints = False:
情节 1 - Boxpoints = '异常值':
不过,这将引发另一个问题,因为默认情况下,第一种情况下不显示标记。但是您可以通过包含另一个这样的跟踪来处理它:
完整的情节:
完整代码:
# imports
from plotly.subplots import make_subplots
import plotly.graph_objs as go
import pandas as pd
import numpy as np
# data
np.random.seed(123)
y0 = np.random.randn(50)-1
x0 = y0
x0 = [0 for y in y0]
y0[-1] = 4 # include an outlier
# custom plotly function
def get_boxplot(boxpoints):
fig = go.Figure(go.Box(y=y0, boxpoints = boxpoints, pointpos = 0,
)
)
if boxpoints==False:
fig.add_trace(go.Box(x=x0,
y=y0, boxpoints = 'all', pointpos = 0,
marker = dict(color = 'rgb(66, 66, 244)'),
line = dict(color = 'rgba(0,0,0,0)'),
fillcolor = 'rgba(0,0,0,0)'
))
get_boxplot.show()
foo(boxpoints=False)