PlotlyJS subplots

Is there a way how to plot subplots containing more than one scatter plot?

Here is just example where I tried to put 3 scatter plots into the first subplot:

using  PlotlyBase

trace1a = scatter(x=1:3, y=2:4)
trace1b = scatter(x=1:3, y=3:7)
trace1c = scatter(x=1:3, y=10:20)
trace1 = [trace1a , trace1b, trace1c ]
trace2 = scatter(x=20:10:40, y=[5,5,5], xaxis="x2", yaxis="y")
trace3 = scatter(x=2:4, y=200:100:800, xaxis="x", yaxis="y3")
trace4 = scatter(x=4000:1000:6000, y=7000:1000:9000, xaxis="x4", yaxis="y4")
data = [trace1, trace2, trace3, trace4]
layout = Layout(
    grid=attr(
        rows=2, columns=2, subplots=[["xy", "x2y"], ["xy3", "x4y4"]],
        roworder="bottom to top"
    )
)
Plot(data, layout)

Have you tried this?

2 Likes

Thank you, I somehow missed it.

Thanks @PetrKryslUCSD

Hi @Oto_Brzobohaty, you can use the built in plotly.js subplot tools

I think the problem was that you need to splat the trace1 when creating the data array (by doing trace1...). As writetn in the original post, data will be a 4 element array, where the first element is itself an array of traces. What we want here is an array of 6 traces.

Here’s a working example (note that I also removed the roworder="bottom to top" in the layout because that was causing the bottom row to be filled in first, so xy was bottom left instead of top left):

using PlotlyBase

trace1a = scatter(x=1:3, y=2:4)
trace1b = scatter(x=1:3, y=3:7)
trace1c = scatter(x=1:3, y=10:20)
trace1 = [trace1a , trace1b, trace1c ]
trace2 = scatter(x=20:10:40, y=[5,5,5], xaxis="x2", yaxis="y")
trace3 = scatter(x=2:4, y=200:100:800, xaxis="x", yaxis="y3")
trace4 = scatter(x=4000:1000:6000, y=7000:1000:9000, xaxis="x4", yaxis="y4")
data = [trace1..., trace2, trace3, trace4]

layout = Layout(
    grid=attr(
        rows=2, columns=2, subplots=[["xy", "x2y"], ["xy3", "x4y4"]],
#         roworder="bottom to top"
    )
)

Plot(data, layout)
1 Like