我已经构建了一个主要由 go.Scatter 痕迹组成的绘图图形。这些跟踪中的每一个都有稍微不同的悬停模板,但我希望合并悬停框中的信息,因此我将悬停模式设置为“x统一”,这解决了我的主要问题,但我还有另一个小问题,我想解决。
我的代码的一个非常基本的重建如下所示:
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data'
iris_df = pd.read_csv(url,header=None,encoding='utf-8')
iris_df.columns = ['sepal length','sepal width','petal length', 'petal width', 'class']
test_fig = go.Figure()
class_colors = {'Iris-setosa':'blue', 'Iris-versicolor':'green', 'Iris-virginica':'purple'}
for group in iris_df['class'].unique():
iris_df_class = iris_df[iris_df['class']==group]
test_fig.add_trace(go.Scatter(x=iris_df_class['sepal length'],
y= iris_df_class['petal length'],
mode='markers',
marker=dict(size=10, color=class_colors[group], symbol=1),
text= group,
hoverinfo='text',
hovertemplate = '<i>Sepal length</i>: %{x:.2f} <extra></extra>',
name= group,
showlegend=True,
legendgroup=group))
iris_df_class_over_6 = iris_df_class[iris_df_class['sepal length']>6]
test_fig.add_trace(go.Scatter(x=iris_df_class_over_6['sepal length'],
y= iris_df_class_over_6['petal length']+0.5,
mode='markers',
marker=dict(size=12, color=class_colors[group], symbol=5),
name='trace2',
meta=iris_df_class_over_6['petal width']/iris_df_class_over_6['sepal width'],
hovertemplate='<i>Petal length</i>: %{y:.2f} <br><i>Petal/sepal width ratio</i>: %{meta:0.2f} <extra></extra>',
showlegend=False,
legendgroup=group))
for s,p in zip(iris_df_class_over_6['sepal length'], iris_df_class_over_6['petal length']):
test_fig.add_trace(go.Scatter(x=[s,s],
y=[p,p+0.5],
mode='lines',
marker_line_width = 2,
line_color=class_colors[group],
name='trace-intermediate',
hoverinfo='skip',
showlegend=False,
legendgroup=group))
test_fig.update_layout(xaxis_title="sepal length", yaxis_title="petal length", hovermode='x unified')
test_fig.show()
查看悬停框时,可以看到 Iris-setosa 类(蓝色)的轨迹位于悬停框的顶部,然后是 Iris-versicolor(绿色),然后是 Iris-virginica(紫色)。如果给定的迹线在某个点不存在,则仍保持顺序(减去不存在的迹线)
现在我想做的是组织这个顺序,使紫色迹线位于顶部,然后是绿色,然后是底部的蓝色。我已尝试检查文档,但不清楚如何更改悬停框中信息的顺序。有人知道可以做什么吗?