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:
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.
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.
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.
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]
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]
# 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()
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:
# 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()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With