我的 Plotly.express 和 Plotly.graph_objects 图的显示顺序有问题。我的散点图绘制在灰色阴影连续错误前面。
我尝试通过更新Fig.data数组中的每个痕迹位置来手动更改痕迹的顺序,但无济于事。
我想将散点图强制到后面/最低的 z 级别。
有什么办法可以让黑线前面/下面的阴影区域变灰吗?
import pandas as pd
import numpy as np
import plotly.graph_objects as go
import plotly.io as pio
import plotly.express as px
pio.renderers.default='browser'
df3 = pd.read_csv('filename.csv')
fig1 = px.scatter(df3, x="height_diff", y="flow_speed",
trendline="ols",
trendline_color_override = 'crimson',
template='plotly',
color_continuous_scale='Viridis',
color=np.random.randn(32145),
title='Linear Regression, HYCOM GOFS3.1, 2010-2020, 3hourly mean height difference vs. 3hourly mean Florida Current flow speed'
)
fig1.add_traces(px.line(df3, x="hgt_roll_avg", y="flow_roll_avg",color_discrete_sequence=['black']).data)
#fig2 = px.line(df3, x="hgt_roll_avg", y="flow_roll_avg",color_discrete_sequence=['black'])
#fig3 = go.Figure(data=fig1.data + fig.data, layout = fig1.layout)
fig1.update_layout(coloraxis_showscale=False,colorscale=dict(diverging = 'Viridis'))
fig1.add_traces([
go.Scatter(
name='Upper Bound',
x=df3['hgt_roll_avg'],
y=df3['flow_roll_avg']+df3['std'],
mode='lines',
marker=dict(color="#444"),
line=dict(width=1),
showlegend=False
),
go.Scatter(
name='Lower Bound',
x=df3['hgt_roll_avg'],
y=df3['flow_roll_avg']-df3['std'],
marker=dict(color="#444"),
line=dict(width=1),
mode='lines',
fillcolor='rgba(68, 68, 68, 0.3)',
fill='tonexty',
showlegend=False
)
])
fig1.show()```
解决方案: 仅使用 PLOTLY.GRAPH_OBJECT 跟踪进行重建。 [1]:
fig1 = go.Figure()
fig1.add_traces([
go.Scatter(
name='scatter',
x=df3['height_diff'],
y=df3['flow_speed'],
mode='markers',
marker=dict(color=np.random.randn(32145),colorscale='Viridis'),
showlegend=False
),
go.Scatter(
x=df4['height_diff'],
y=df4['bestfit'],
mode='lines',
marker=go.Marker(color='crimson'),
showlegend=False
)])
fig1.add_traces([
go.Scatter(
name='Upper Bound',
x=df3['hgt_roll_avg'],
y=df3['flow_roll_avg']+df3['std'],
mode='lines',
marker=dict(color="#444"),
line=dict(width=1),
showlegend=False
),
go.Scatter(
name='Lower Bound',
x=df3['hgt_roll_avg'],
y=df3['flow_roll_avg']-df3['std'],
marker=dict(color="#444"),
line=dict(width=1),
mode='lines',
fillcolor='rgba(68, 68, 68, 0.3)',
fill='tonexty',
showlegend=False
),
go.Scatter(
x=df3['hgt_roll_avg'],
y=df3['flow_roll_avg'],
mode='lines',
marker=dict(color="black"),
line=dict(width=1),
showlegend=False
)
])
fig1.show()
一种解决方案是使用
go.Scattergl
而不是 px.scatter
作为您想要显示在顶部的迹线。
您出现跟踪绘制顺序与代码中的顺序不匹配的行为的原因是,Plotly 首先按照添加到 fig
和
的顺序绘制常规跟踪然后按照添加到
plotly.express.scatter
的顺序绘制使用WebGL绘图引擎创建的轨迹(通过
fig
创建的轨迹)。
因此,需要明确的是,使用 WebGL 引擎创建的任何轨迹都将绘制在任何常规轨迹之上,例如
go.Scatter
,即使此类轨迹被添加到fig
之后WebGL 轨迹。
在您的情况下,这条线是罪魁祸首,因为它是在稍后添加的
go.Scatter
迹线之上绘制的。
fig1 = px.scatter(df3, x="height_diff", y="flow_speed", ...)
如果您将所有
go.Scatter
跟踪更改为 go.Scattergl
,那么您在代码中添加每条跟踪的顺序将被保留,因为每条跟踪都将使用 WebGL 绘图引擎进行。
或者,您可以将
px.scatter
更改为 go.Scatter
,以便 WebGL 绘图引擎不会使用任何痕迹,如您在答案中所示。