Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to plot multiple lines on the same y-axis using Plotly Express in Python

I just installed plotly express. And I am trying to do something simple - plot each column of my data frame on the same y-axis with the index as x-axis. Here are questions/observations:

Is it necessary for the data frame to have index as a column to be used as x-axis ? Can I not directly use the index for x-axis? How can I add multiple traces as were called in plotly on y-axis for the same x-axis ?

Please note that, I am not trying to add traces using plotly, rather trying to use plotly-express.

Also, there a few similar posts online, the closest was this: https://community.plot.ly/t/multiple-traces-plotly-express/23360 However, this post shows how you can add a scatter, not a line. I want to plot a line and there is no add_line similar to add_scatter shown in the example here.

Appreciate any help in advance

Sample code:

import plotly.express as px 
import pandas as pd 
import numpy as np 

# Get some data
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')

# Plot 
fig = px.line(df, x='Date', y='AAPL.High')

# Only thing I figured is - I could do this 
fig.add_scatter(x=df['Date'], y=df['AAPL.Low']) # Not what is desired - need a line 

# Show plot 
fig.show()

PLot:

enter image description here

like image 584
UGuntupalli Avatar asked Sep 27 '19 22:09

UGuntupalli


People also ask

How do you plot more than one line on a graph in Python?

You can plot multiple lines from the data provided by an array in python using matplotlib. You can do it by specifying different columns of the array as the x and y-axis parameters in the matplotlib. pyplot. plot() function.

How do you plot two Y-axis in Plotly?

Note: At this time, Plotly Express does not support multiple Y axes on a single figure. To make such a figure, use the make_subplots() function in conjunction with graph objects as documented below.

How do you use subplots in Plotly?

Simple SubplotFigures with subplots are created using the make_subplots function from the plotly. subplots module. Here is an example of creating a figure that includes two scatter traces which are side-by-side since there are 2 columns and 1 row in the subplot layout.


1 Answers

Short answer:

fig = px.line(df, x='Date', y=df.columns[1:-6])

Where df.columns are the column names of the columns returned as a list, or a subset of the columns using, for example, df.columns[1:-6]


The details

Your code works fine But if you specifically do not want to apply the (somewhat laborious) add_trace() function to each line, you can use px.line(). This used to require you to transform your data from a wide to long format. But not anymore, so just define an index and name the columns you'd like to plot. Or reference all or a subset of your dataframe columns through, for ecxample, y=df.columns[1:-6]

Code 1:

# imports
import plotly.express as px 
import pandas as pd 
import numpy as np 

# data
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
fig = px.line(df, x='Date', y=df.columns[1:-6])

# Show plot 
fig.show()

Plot:

enter image description here

If you'd like to know how to do the same thing with data of a long format, here's how you do that too using pandas and plotly:

Code 2:

# imports
import plotly.express as px 
import pandas as pd 
import numpy as np 

# data
df_wide = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
df_long=pd.melt(df_wide, id_vars=['Date'], value_vars=['AAPL.Open', 'AAPL.High', 'AAPL.Low', 'AAPL.Close', 'mavg'])

# plotly 
fig = px.line(df_long, x='Date', y='value', color='variable')

# Show plot 
fig.show()
like image 185
vestland Avatar answered Sep 22 '22 01:09

vestland