16
votes

The plotly docs for legends provides info on hiding legend entries:

import plotly.plotly as py
import plotly.graph_objs as go

trace0 = go.Scatter(
    x=[1, 2, 3, 4, 5],
    y=[1, 2, 3, 4, 5],
    showlegend=False
)

trace1 = go.Scatter(
    x=[1, 2, 3, 4, 5],
    y=[5, 4, 3, 2, 1],
)

data = [trace0, trace1]
fig = go.Figure(data=data)

py.iplot(fig, filename='hide-legend-entry')

However, I'm generating my plot from a DataFrame. So, I already have a plotly figure, and therefore don't have the liberty of setting showlegend=False for each trace.

import pandas as pd
import plotly.offline as py
import cufflinks as cf
cf.go_offline()

df = pd.DataFrame(data=[[0, 1, 2], [3, 4, 5]], columns=['A', 'B', 'C'])
py.plot(df.iplot(kind='scatter', asFigure=True))

I want to hide a list of columns.

columns_to_hide = ['A', 'C']

How can I do this?

2

2 Answers

17
votes

You can set any parameters of figure before plotting like here:

import pandas as pd
import plotly.offline as py
import plotly.graph_objs as go
import cufflinks as cf
cf.go_offline()

df = pd.DataFrame(data=[[0, 1, 2], [3, 4, 5]], columns=['A', 'B', 'C'])

# get figure property
fig = df.iplot(kind='scatter', asFigure=True)

# set showlegend property by name of trace
for trace in fig['data']: 
    if(trace['name'] != 'B'): trace['showlegend'] = False

# generate webpage
py.plot(fig)
8
votes

Not sure if this is a recent addition, but in current versions of plotly (4.0 and above), you can do fig.update(layout_showlegend=False).