Я пытаюсь построить диаграмму рассеяния, используяplotly, где представлены две группы данных (нормальные, аномальные). Проблема заключается в точках легенды: нажатие на «нормальную» легенду правильно фильтрует «нормальную» точку данных на графике, нажатие на «аномальную» с другой стороны не отфильтровывает ее, а просто выделяет точки данных на графике серым цветом. сюжет.
Я не знаю, что вызывает эту ситуацию, но я ожидаю, что график сможет правильно отфильтровать точки данных из легенды:
df['Type'] = 'Normal'
df.loc[df['IFAnomaly'] < 0, 'Type'] = 'Anomalous'
fig = px.scatter(df, x='Raw Data Size', y='IFScores', hover_data = {'Number of Rows': True, 'IFScores': True, 'Total Size': True, 'Adjusted Size': False}, color='Type', color_discrete_map = {'Normal': 'green', 'Anomalous': 'red'}, size='Adjusted Size')
fig.add_trace(px.scatter(df[df['IFAnomaly']==-1], x='Raw Data Size', y='IFScores', hover_data = {'Number of Rows': True, 'IFScores': True, 'Total Size': True, 'Adjusted Size': False},color_discrete_sequence=['red'], size='Adjusted Size').data[0])
fig.update_layout(title='Normal vs. Anomalous data points', xaxis_title='Raw Data Size', yaxis_title='Isolation Forest Scores', legend=dict(traceorder='reversed'))
fig.update_traces(marker=dict(sizemin=3))
fig.update_layout(title='Normal vs. Anomalous data points')
fig.show()
Когда вы используете px.scatter
с аргументом color='Type'
, вы уже добавляете как нормальные, так и аномальные точки. Вам не нужно добавлять еще одну трассировку только аномальных точек, поэтому вы можете избавиться от линии
fig.add_trace(px.scatter(...))
Следующее должно работать как положено:
df['Type'] = 'Normal'
df.loc[df['IFAnomaly'] < 0, 'Type'] = 'Anomalous'
fig = px.scatter(df, x='Raw Data Size', y='IFScores', hover_data = {'Number of Rows': True, 'IFScores': True, 'Total Size': True, 'Adjusted Size': False}, color='Type', color_discrete_map = {'Normal': 'green', 'Anomalous': 'red'}, size='Adjusted Size')
fig.update_layout(title='Normal vs. Anomalous data points', xaxis_title='Raw Data Size', yaxis_title='Isolation Forest Scores', legend=dict(traceorder='reversed'))
fig.update_traces(marker=dict(sizemin=3))
fig.update_layout(title='Normal vs. Anomalous data points')
fig.show()