Search code examples
pandasdataframeplotly

Ploting dataframe with NAs with linearly joined points


I have a dataframe where each column has many missing values. How can I make a plot where the datapoints in each column are joined with lines, i.e. NAs are ignored, instead of having a choppy plot?

import numpy as np
import pandas as pd

pd.options.plotting.backend = "plotly"

d = pd.DataFrame(data = np.random.choice([np.nan] + list(range(7)), size=(10,3)))
d.plot(markers=True)

One way is to use this for each column:

fig = go.Figure()
fig.add_trace(go.Scatter(x=x, y=y, name="linear",
                    line_shape='linear'))

Are there any better ways to accomplish this?


Solution

  • You can use pandas interpolate. Have demonstrated using plotly express and chained use so underlying data is not changed.

    Post comments have amended answer so that markers are not shown for interpreted points.

    import numpy as np
    import pandas as pd
    import plotly.express as px
    
    d = pd.DataFrame(data=np.random.choice([np.nan] + list(range(7)), size=(10, 3)))
    px.line(d).update_traces(mode="lines+markers").add_traces(
        px.line(d.interpolate(limit_direction="both")).update_traces(showlegend=False).data
    )
    

    enter image description here