import plotly.graph_objects as go
import numpy as np

# 生成一些随机数据
np.random.seed(10)
data = np.random.randn(100)

# 计算均值
mean_value = np.mean(data)

# 创建箱线图
fig = go.Figure()

# 添加箱线图
fig.add_trace(go.Box(
    y=data,
    boxmean=False,  # 不显示均值线
    marker_color='blue',  # 箱体颜色
    line_color='blue',  # 边框颜色
    width=0.4  # 调整箱体宽度
))

# 添加均值线
fig.add_shape(
    type='line',
    x0=0,
    y0=mean_value,
    x1=1,
    y1=mean_value,
    xref='paper',
    yref='y',
    line=dict(color='green', width=2)
)

# 更新中位数线颜色及其宽度
fig.update_traces(
    marker=dict(color='blue'),
    line=dict(color='blue'),
    width=0.4,
    # 这里使用线条属性更新中位数线
    quartilemethod="exclusive",  # 使用独占四分位数法
)

# 手动添加中位数线
median_value = np.median(data)
fig.add_shape(
    type="line",
    x0=0,
    y0=median_value,
    x1=1,
    y1=median_value,
    xref="paper",
    yref="y",
    line=dict(color="red", width=1)
)

# 显示图表
fig.show()
