Msgstr "min () arg - empty sequence" when trying to convert my pandas chart to plotly

I get a ValueError: min() arg is an empty sequence when I try to convert a pandas data plot into a plot.

Here is an example data frame (with NaN):

ttab.loc[:,:"Irish"]

 Group English (British) Americans (White) Canadians Scots Irish Year 1926 1 2 3 4 5 1946 3 1 2 5 4 1956 3 1 2 7 5 1966 2 1 3 9 5 1977 2 1 3 9 7 1993 2 NaN NaN 6 1 2001 4 1 3 NaN 5 2001* 4 1 3 NaN 5 2012 4 1 3 NaN 6 

I am doing a beautiful plot:

 # Time It import time begin = time.clock() # Inline plotting %matplotlib inline # Import libraries import matplotlib import numpy as np import matplotlib.pyplot as plt import pandas as pd import seaborn as sns from pandas.tools.plotting import scatter_matrix # (*) To communicate with Plotly server, sign in with credentials file import plotly.plotly as py # (*) Useful Python/Plotly tools import plotly.tools as tls # (*) Graph objects to piece together plots from plotly.graph_objs import * # Read, clean, slice data here... # Rename columns, examine, rename groups here... # Merge, set index, transpose dataframe here.... # Change datatype to float here... # Define color palette here... # Now Plot... # Package all mpl plotting commands inside one function def plot_mpl_fig(): # plot parameters figsize = (12,12) axfontsize = 16 legfontsize = 14 labfontsize = 18 yax = (30,0) lw = 2 # Interpolate NaNs and plot as dashed lines ax = ttab.loc[:,:'Asian Indians'].interpolate().plot(color=colorlist, ylim=yax, lw=lw, fontsize=axfontsize, \ figsize=figsize, style='--') # Overplot the measured values with solid lines ttab.loc[:,:'Asian Indians'].plot(ax=ax, color=colorlist, ylim=yax, lw=lw, fontsize=axfontsize, figsize=figsize) # Legend handling lines, labels = ax.get_legend_handles_labels() ax.legend(lines[28:], labels[28:], loc='center left', bbox_to_anchor=(-0.3, 0.5), fontsize=legfontsize) # Labeling plt.xlabel('Year',fontsize=labfontsize) plt.ylabel('Rank',fontsize=labfontsize) # Plot it! plot_mpl_fig() # NB get matplotlib figure object and assign a variable to it mpl_fig1 = plt.figure() 

And then I try to convert, following an example: https://plot.ly/python/matplotlib-to-plotly-tutorial/

Quickstart:

 >>> import plotly.plotly as py >>> import matplotlib.pyplot as plt >>> # auto sign-in with credentials or use py.sign_in() >>> mpl_fig_obj= plt.figure() >>> # ... make a matplotlib figure ... >>> py.plot_mpl(mpl_fig1) # <== ValueError 

Or the tutorial in section 6.1:

 # Convert a matplotlib figure object to a Plotly figure object help(tls.mpl_to_plotly) py_fig1 = tls.mpl_to_plotly(mpl_fig1, verbose=True) # <== ValueError print(py_fig1.to_string()) # Plot a matplotlib figure in Plotly help(py.iplot_mpl) py.iplot_mpl(mpl_fig1, filename='s6_damped_oscillation') # <== ValueError 

Anytime I call plot_mpl , mpl_to_plotly or iplot_mpl I get ValueError: min() arg is an empty sequence . I think this may be related to NaNs, but I don't know how to get around this. Any suggestions?

+5
source share
1 answer

It looks like mpl_to_plotly requires the use of axes.plot (), not plt.plot (). The following code works on a Jupyter laptop.

 import plotly.offline as py from plotly.offline import init_notebook_mode, iplot import plotly.tools as tls import matplotlib.pylab as plt from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas init_notebook_mode(connected=True) fig = plt.Figure() ax = fig.gca() x = [-2,0,4,6,7] y = [q**2-q+3 for q in x] ax.plot(x,y) canvas = FigureCanvas(fig) plotly_fig = tls.mpl_to_plotly(fig) py.iplot(plotly_fig) 
0
source

Source: https://habr.com/ru/post/1233094/


All Articles