我知道1.5 * IQR是一个通用规则,但我想尽可能绘制其他最小/最大。我正在使用plotly(python)。基本上,我想定义一个函数来通过参数数据框,列和自定义乘数显示箱线图。

df_test = pd.Series(np.array([26124.0, 8124.0, 27324.0, 13188.0, 21156.0]))

def get_boxplot(df,column, multiplier):
    data = [go.Box(y=df[column],boxpoints="outliers")]
    return pyo.plot(data)

get_boxplot(df_test,0,3)


我的目标是用乘数参数替换1.5 * IQR。在此示例中,以3或任何其他数字表示。

您是否知道如何更改我的功能?

谢谢!

最佳答案

在python的范围内似乎无法获得您正在寻找的确切结果,这意味着这些属性充其量仅在javascript上下文中可用。

不过,您仍然有一些关于晶须放置的选择。您对1.5 * IQR部分的看法是正确的。在help(fig)中,您可以找到:


  默认情况下,晶须对应于盒子的边缘+/- 1.5倍
  四分位间距(IQR:Q3-Q1),其他请参见“盒点”
  选项。


boxpoints下,您会发现:


  如果是“异常值”,则只有位于晶须外部的采样点才是
  如果显示“疑似异常值”,则显示异常点和
  突出显示小于4 * Q1-3 * Q3或大于4 * Q3-3 * Q1
  (请参见outliercolor)如果为“全部”,则显示所有样本点。如果为False,
  仅显示框,没有样本点


所以对于不同的值

'boxpoints':False, 'all', outliers您将获得:

python -  plotly :如何更改箱状图中晶须的长度(最小/最大)?-LMLPHP

如下所述,是否显示boxpoints也将确定晶须的位置。因此,您可以在自定义函数中使用False, 'all', outliers作为参数,以至少能够在这些选项之间进行切换。根据您的问题判断boxpoints=False不应太过偏离目标。

这是一种方法:

Boxpoint设置为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:

python -  plotly :如何更改箱状图中晶须的长度(最小/最大)?-LMLPHP

情节1-Boxpoints ='离群值':
python -  plotly :如何更改箱状图中晶须的长度(最小/最大)?-LMLPHP

但是,这将引发另一个问题,因为默认情况下标记不会在第一种情况下显示。但是,您可以通过包含另一条这样的跟踪信息来处理:

完整图:

python -  plotly :如何更改箱状图中晶须的长度(最小/最大)?-LMLPHP

完整的代码:

# 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)

关于python - plotly :如何更改箱状图中晶须的长度(最小/最大)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59126049/

10-13 01:12