python - Pandas, matplotlib and plotly - how to fix series legend? -


i'm trying create interactive plotly graph pandas dataframes.

however, can't legends displayed correctly.

here working example:

import pandas pd import numpy np import matplotlib.pyplot plt import plotly.plotly py  # sign plotly api py.sign_in("***********", "***********")  # create random dataframes dates = pd.date_range('1/1/2000', periods=8) df1 = pd.dataframe(np.random.randn(8, 1), index=dates, columns=['a']) df2 = pd.dataframe(np.random.randn(8, 1), index=dates, columns=['b']) df1.index.name = 'date' df2.index.name = 'date' 

now attempt plot dataframes using plotly.

fig, ax = plt.subplots(1,1)  df1.plot(y='a', ax=ax) df2.plot(y='b', ax=ax)  py.iplot_mpl(fig, filename='random') 

notice there no legend

plotly - no legend

edit:

based on suggestions below have added update dict. although display legend, messes plot itself:

fig, ax = plt.subplots(1,1)  df1.plot(y='a', ax=ax) df2.plot(y='b', ax=ax)  update = dict(     layout=dict(         annotations=[dict(text=' ')],  # rm erroneous 'a', 'b', ... annotations         showlegend=true                # show legend      ) ) py.iplot_mpl(fig, update=update, filename='random') 

enter image description here

edit 2:

removing annotations entry layout dict results in plot being displayed correctly, legend not y column name, rather x column name, index name of dataframe

fig, ax = plt.subplots(1,1)  df1.plot(y='a', ax=ax) df2.plot(y='b', ax=ax)  update = dict(     layout=dict(         showlegend=true                # show legend      ) ) py.iplot_mpl(fig, update=update, filename='random') 

this results in following plot:

enter image description here

edit 3:

i have found way override legend text seems bit klunky. given i've specified dataframe column want plot:

df1.plot(y='a', ax=ax) 

i have expected y='a' result in 'a' being used legend label.

it seems not case, , while possible override using index label, seen below, feels wrong.

is there better way achieve result?

update = dict(     layout=dict(         showlegend=true,     ),     data=[         dict(name='a'),         dict(name='b'),     ] ) py.iplot_mpl(fig, update=update, filename='random') 

enter image description here

legends don't convert matplotlib plotly.

fortunately, adding plotly legend matplotlib plot straight forward:

update = dict(     layout=dict(         showlegend=true  # show legend      ) ) py.iplot_mpl(fig, update=update) 

see full working ipython notebook here.

for more information, refer plotly user guide.


Comments

Popular posts from this blog

php - failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request -

java - How to filter a backspace keyboard input -

java - Show Soft Keyboard when EditText Appears -