箱线图显示扁线而不是盒子和胡须,plotly python

问题描述 投票:0回答:1

我正在尝试用 go.Box 绘制一些由分类变量组织的箱线图。然而,当我绘制数据时,只显示一条平线。 [注意:这个问题在 R 中似乎有详细记录,但我还没有找到 Python 的类似问题。如果找到的话请链接到它。]

使用 px.express 绘图不会复制此错误,似乎只是使用 go.Box。

多列的 MRE:

fares = [random.random() for g in np.arange(10000)]
types = ["new", "new", "old", "old", "really_old"] * 2000

df = pd.DataFrame({
    "bus_fares": fares,
    "bus_types": types
}) 

# -----

traces = []

for k in df["bus_types"].unique():
    trace = go.Box(
        x = [k],
        y = df[df["bus_types"]==k]["bus_fares"],
        marker={"color": next(color_iter)},
        name="bus_types",
        showlegend=False
    )

    traces.append(trace)

go.Figure(traces)

此代码呈现如下所示的图。 enter image description here

即使我们简化并只绘制一个框,没有循环,它仍然显示相同的行为。

#-----
x = "bus_types"
y = "bus_fares"
k = "old"

go.Figure(go.Box(x=[k], y=df[df[x]==k][y].values, name=x, showlegend=False))

enter image description here

有人知道如何在 Python 中修复此行为吗?

python plotly
1个回答
0
投票

您在 for 循环中将 x 作为单个值 [k] 传递。

将循环中的x替换为

x=df[df["bus_types"] == k]["bus_types"]

这样您将选择一系列新的、旧的等等。

其余的都一样,就可以了。

这里 Plotly 需要带有 go.Box 的数组。希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.