0

My code so far:

fig2 = plotly.subplots.make_subplots(rows=3, cols=1, shared_xaxes=True)
fig2.append_trace(
        go.Scatter(x=df['Date_Time'], y=df["N2O_rSig"]), row=1, col=1)
                   
fig2.append_trace(                   
        go.Scatter(x=df['Date_Time'], y=df["Flow_rSig"]), row=2, col=1)
        
fig2.append_trace(   
        go.Scatter(x=df['Date_Time'], y=df["O2_rSig"]), row=3, col=1)
   
fig2.update_layout(title_text="Stacked Subplots")

fig2.write_html("test_plotly.html")

For each trace I want to have a discrete color governed by Valve_ai but I just can't seem to find the right way. Is there a way without having to rebuild that way my data is sent to Plotly.graph_objects.

I noticed Plotly Express has the ability to split long data based on the variable "color". Cufflinks also manages this with categories. However I in order to manage Legends across multiple subplots Plotly.go seems like the only option.

Here is the example data

,Unnamed: 0,Date_Time,N,Valve_ai,N2O_rSig,NO_rSig,O2_rSig,CO2_rSig,Flow_rSig
48,57,2020-07-15 00:00:57,58,Bio1 G1,6.33,16.69,20.61,1.0,1.02
49,58,2020-07-15 00:00:58,59,Bio1 G1,6.13,16.62,20.61,1.0,0.96
50,59,2020-07-15 00:00:59,60,Bio1 G1,6.15,16.56,20.6,1.0,0.98
51,60,2020-07-15 00:01:00,61,Bio1 G1,6.12,16.55,20.59,1.0,0.86
52,61,2020-07-15 00:01:01,62,Bio1 G1,6.44,16.68,20.6,1.0,1.07
53,62,2020-07-15 00:01:02,63,Bio1 G1,6.69,16.63,20.59,1.0,0.94
54,64,2020-07-15 00:01:04,65,Bio1 G2,7.28,16.69,20.57,1.0,0.98
55,65,2020-07-15 00:01:05,66,Bio1 G2,7.98,17.06,20.49,1.0,1.05
56,66,2020-07-15 00:01:06,67,Bio1 G2,8.82,17.37,20.4,1.0,0.98
57,67,2020-07-15 00:01:07,68,Bio1 G2,10.03,17.78,20.26,1.0,0.9
58,68,2020-07-15 00:01:08,69,Bio1 G2,13.4,19.36,19.94,1.0,1.02
59,69,2020-07-15 00:01:09,70,Bio1 G2,15.55,20.68,19.77,1.0,0.85
nkrh
  • 45
  • 5
  • Does the post [Plotly: How to define colors in a figure using plotly.graph_objects and plotly.express?](https://stackoverflow.com/questions/63460213/plotly-how-to-define-colors-in-a-figure-using-plotly-graph-objects-and-plotly-e/63460218#63460218) not answer your question? – vestland Sep 03 '20 at 13:26
  • So I am looking for the exact reverse of that question. I have already made a plot with plotly.express that perfectly separates lines/colours based on the value in `df['Valve_ai]` Now I'm looking to do the same with Plotly.graph_objects instead of using plotly express (px). This is because I need to create a couple of subplots which according to the documentation isn't possible with px. – nkrh Sep 03 '20 at 15:29
  • If you include your data sample in your code snippet and make sure it produces a fig, I'll take a closer look at it within an hour. – vestland Sep 03 '20 at 15:48
  • Cheers vestland, I found the solution now and have put it as the answer! – nkrh Sep 03 '20 at 16:09

1 Answers1

0

So after a bit of looking around I found a direct comparison with bar graphs on the plotly website

The following code allowed me to split up my Data Frame based on Valve and then iterate through each DF to create individual traces.

for valve, group in df.groupby("Valve_ai"):
        fig.add_trace(go.Scatter(x=group["Date_Time"], y=group["N2O_rSig"], name=valve)
nkrh
  • 45
  • 5