How to avoid duplicate legend labels in plotly or pass custom legend labels
This is a code snippet I came up with which avoids to set showlegend=False
manually on each trace with a duplicate name
.
names = set()
fig.for_each_trace(
lambda trace:
trace.update(showlegend=False)
if (trace.name in names) else names.add(trace.name))
fig.for_each_trace
calls the passed function for each trace. The function keeps track of which legend names already occurred (via the set names
, like @LucG proposed in a comment), and hides legend entries for duplicate (or triplicate, ...) names.
The code needs to be run after all traces have been added to the figure, and before it is show
n.
Plotly controls this on the trace level. Try passing in showlegend=False
inside the Histogram
traces that you don't want to appear in the legend.
Reference: https://plot.ly/python/reference/#Histogram-showlegend
Example: https://plot.ly/python/legend/#Hiding-Legend-Entries
Direct copy-paste from the link above.
import plotly.plotly as py
from plotly.graph_objs import *
# Fill in with your personal username and API key
# or, use this public demo account
py.sign_in('Python-Demo-Account', 'gwt101uhh0')
trace1 = Scatter(
x=[0, 1, 2],
y=[1, 2, 3],
name='First Trace',
showlegend=False
)
trace2 = Scatter(
x=[0, 1, 2, 3],
y=[8, 4, 2, 0],
name='Second Trace',
showlegend=True
)
data = Data([trace1, trace2])
plot_url = py.plot(data, filename='show-legend')
The usage you want to see is shown in trace1
above.