我正在尝试用 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)
即使我们简化并只绘制一个框,没有循环,它仍然显示相同的行为。
#-----
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))
有人知道如何在 Python 中修复此行为吗?
您在 for 循环中将 x 作为单个值 [k] 传递。
将循环中的x替换为
x=df[df["bus_types"] == k]["bus_types"]
这样您将选择一系列新的、旧的等等。
其余的都一样,就可以了。
这里 Plotly 需要带有 go.Box 的数组。希望这有帮助。