箱形图因同名而重叠
Box plot are overlapping because of same name
for design in list
if len(design) > 12:
df["Name"] = str(design)[:12] + str("...")
fig.add_trace(
go.Box(
x=df["Name"],
y=df[y_variable],
name="",
quartilemethod=quartile_method,
boxpoints=False,
)
所以如果我在列表中有 2 个名字
名称 1 = ABCDEFGHIJKL
name2 = ABCDEFGHIJKLM
截断后
名称 1 = ABCDEFGHIJKL
name2 = ABCDEFGHIJKL
所以两者在 x 中变得相同。
具有相同 x 的重叠盒印迹
如何克服这个问题?
我尝试使用唯一标识符,但同时我想在 x 轴上使用相同的标识符
- 重新使用 https://plotly.com/python/box-plots/#box-plot-with-plotlyexpress 作为可重新运行示例的基础
- 模拟了您注意到的问题,其中 x 值重叠
- 已解决,通过
- 不截断 x 值
- 通过更新 xaxis 刻度来解决,以便显示截断值并保留条形图
import plotly.express as px
import plotly.graph_objects as go
df = px.data.tips()
df["name"] = df["time"].map({"Dinner": "ABCDEFGHIJKLMNO", "Lunch": "ABCDEFGHIJKLMNOP"})
go.Figure(
[
go.Box(
x=df.loc[df["name"].eq(n), "name"].str[0:12],
y=df.loc[df["name"].eq(n), "total_bill"],
name=n,
boxpoints=False
)
for n in df["name"].unique()
]
).show()
go.Figure(
[
go.Box(
x=df.loc[df["name"].eq(n), "name"],
y=df.loc[df["name"].eq(n), "total_bill"],
name=n,
boxpoints=False
)
for n in df["name"].unique()
]
).update_layout(xaxis=dict(tickmode="array", tickvals=df.loc[:, "name"], ticktext=df.loc[:, "name"].str[0:12]))
for design in list
if len(design) > 12:
df["Name"] = str(design)[:12] + str("...")
fig.add_trace(
go.Box(
x=df["Name"],
y=df[y_variable],
name="",
quartilemethod=quartile_method,
boxpoints=False,
)
所以如果我在列表中有 2 个名字 名称 1 = ABCDEFGHIJKL name2 = ABCDEFGHIJKLM
截断后 名称 1 = ABCDEFGHIJKL name2 = ABCDEFGHIJKL
所以两者在 x 中变得相同。
具有相同 x 的重叠盒印迹
如何克服这个问题? 我尝试使用唯一标识符,但同时我想在 x 轴上使用相同的标识符
- 重新使用 https://plotly.com/python/box-plots/#box-plot-with-plotlyexpress 作为可重新运行示例的基础
- 模拟了您注意到的问题,其中 x 值重叠
- 已解决,通过
- 不截断 x 值
- 通过更新 xaxis 刻度来解决,以便显示截断值并保留条形图
import plotly.express as px
import plotly.graph_objects as go
df = px.data.tips()
df["name"] = df["time"].map({"Dinner": "ABCDEFGHIJKLMNO", "Lunch": "ABCDEFGHIJKLMNOP"})
go.Figure(
[
go.Box(
x=df.loc[df["name"].eq(n), "name"].str[0:12],
y=df.loc[df["name"].eq(n), "total_bill"],
name=n,
boxpoints=False
)
for n in df["name"].unique()
]
).show()
go.Figure(
[
go.Box(
x=df.loc[df["name"].eq(n), "name"],
y=df.loc[df["name"].eq(n), "total_bill"],
name=n,
boxpoints=False
)
for n in df["name"].unique()
]
).update_layout(xaxis=dict(tickmode="array", tickvals=df.loc[:, "name"], ticktext=df.loc[:, "name"].str[0:12]))