如何使用 Plotly 控制在顶部绘制哪些轨迹图?

How do I control which trace plots on top with Plotly?

我正在使用 Plotly python 库生成一个包含多个小提琴图和多个填充散点图的图形。无论我在代码中以什么顺序调用 fig.add_trace,小提琴图总是在散点图后面绘制。

有谁知道是否有控制布局或绘图顺序的特定方法?像 zorder=3 这样的东西?

目前,您可以通过对数据数组中的轨迹对象进行排序来控制轨迹类型内的轨迹顺序,但不能跨轨迹类型,因此小提琴将始终在散点后面绘制。

我找到了一个巧妙的解决方法。在这种情况下,您首先将图形对象分配给一个变量:

PLOT1 = go.Scatter(STUFF)
PLOT2 = go.Scatter(STUFF)
PLOT3 = go.Scatter(STUFF)

然后您可以指定具有所需顺序的字典:

order = {"1":PLOT3, "2":PLOT1, "3":PLOT2}

for i in np.arange(1, len(order) + 1):
    for plot_order, trace in order.items():
        if plot_order == str(i):
            fig.add_trace(trace)

这样你就可以控制字典的顺序了。我希望它有所帮助!它帮助了我。

对此有一个功能请求,并且提出了一种在某些时候有效的解决方法:feature request: z-ordering parameter for traces

import plotly.express as px
import plotly.graph_objects as go

fig = px.scatter(x=[1,2,3,4], y=[1,2,3,4], size=[1,2,3,4], color=["a","a","b","b"])
fig.add_trace(go.Scatter(x=[1,2,3,4], y=[1,2,3,4], mode="lines", line_color="black"))

# Re-order the data:
fig.data = (fig.data[1],fig.data[0])
# fig.data = fig.data[::-1]  # alternatively, via slicing

fig.show()