Don99
Don99

Reputation: 229

How do I combine two plots into one figure using Plotly?

I have 2 csv files, my codes are as below.

df = pd.read_csv("test.csv",
             sep='\t',skiprows=range(9),names=['A', 'B', 'C','D'])

df2 = pd.read_csv("LoadMatch_Limit.csv",skiprows=range(1),names=['X','Y'])

fig = px.line([df,df2], x=['A','X'] , y=['D','Y'])

I would like my line chart, x-axis to take from (columns 'A' and 'X') and my y-axis to take from (columns 'D' and 'Y'). Is there anyway I can plot these 2 charts as one figure?

Upvotes: 6

Views: 29039

Answers (2)

kelvt
kelvt

Reputation: 1038

You could create the two plots and combine them with plotly graph objects

import plotly.express as px
import plotly.graph_objects as go

fig1 = px.line(df, x='A', y='D')
fig2 = px.line(df2, x='X', y='Y')

fig = go.Figure(data = fig1.data + fig2.data)
fig.show()

Upvotes: 20

Priya
Priya

Reputation: 743

Plotly.offline has no attribute line. You need to use the graph object to plot two graphs in a single figure. A simple example is shown below(run the code below and see the output graph)

import numpy as np
import pandas as pd
import plotly.offline as py
import plotly.graph_objs as go
from plotly import tools

df1 = pd.DataFrame({"X":np.linspace(0,30,10), "Y":np.random.rand(10)})
df2 = pd.DataFrame({"A":np.linspace(0,40,10), "B":np.random.rand(10)})

# plotting the graphs...

# 'rgb(128, 0, 128)'
# color=sns.color_palette()
def scatter_chart(x, y, color, name):

   trace = go.Scatter(
             x=x.values,
             y=y.values,
             name=name,
   
             marker=dict(
                    color=color,
                    line=dict(
                    color=color,
                    width=1)
                  ),
              )
  return trace
trace1 = scatter_chart(df2["A"], df2["B"], 'rgb(128, 0, 128)', "df2")
trace2 = scatter_chart(df1["X"], df1["Y"], 'rgba(50, 171, 96, 0.6)', "df1")
fig = tools.make_subplots(rows=1,cols=1, vertical_spacing=0.5)
fig.add_trace(trace1)
fig.add_trace(trace2)

fig.update_layout(
title="df2 and df1 plot",
height=600, 
width=600, 
# annotations=annotations, 
xaxis=dict(tickangle=-45),
legend=dict(x=0.029, y=1.038, font_size=10),
margin=dict(l=100, r=20, t=70, b=70),
paper_bgcolor='rgb(248, 248, 255)',
plot_bgcolor='rgb(248, 248, 255)',)
py.iplot(fig, filename='pageviews_plots_4')

Upvotes: 2

Related Questions