Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Plotly: How to add borders and sidelabels to subplots, and syncronize panning?

Tags:

python

plotly

The following graph is my attempt to use Plotly in Python (code at the very bottom) to do 2x2 plot. enter image description here

I am trying to improve the graph but I can't seem to do the following:

  1. Borders on each of the subplots
  2. Synchronize panning and zooming across all the plots. Although I am using shared_xaxes and shared_yaxes, it only works for the row and column of the subplot. So if I pan around on the lower left graph, the upper right graph remains unmoved.
  3. Sidelabels to label the subplots. See for e.g. enter image description here

Any help would be much appreciated. Below is my code so far.

import plotly.offline as poff
import plotly.tools as tls

x = list(range(10,20))
y = x
y1 = [10-i for i in x]
y2 = [abs(i-5) for i in x]
y3 = [abs(2*i- 5) for i in x]

fig = tls.make_subplots(rows=2, cols=2, shared_xaxes=True, shared_yaxes=True,
                        vertical_spacing=0.01,
                        horizontal_spacing=0.01, print_grid=True)
fig.append_trace(go.Scatter({'x':x, 'y':y, 'name':'A1'},), 1, 1)
fig.append_trace(go.Scatter({'x':x, 'y':y1, 'name':'B2'},), 2, 2)
fig.append_trace(go.Scatter({'x':x, 'y':y2, 'name':'A2'},), 2, 1)
fig.append_trace(go.Scatter({'x':x, 'y':y3, 'name':'B1'},), 1, 2)

fig['layout'].update(title='Multiple Subplots')
url = poff.plot(fig, filename="test23.html")
like image 319
Spinor8 Avatar asked Mar 22 '16 06:03

Spinor8


1 Answers

Here's a suggestion that should be very close to 100%, at least regarding what's actually possible at the moment:

1. Subplot borders: fig_update_xaxes(mirror=True)

2. You're already as close as you're going to get at the moment

3. Sidelabels: fig['layout']['xaxis']['title']='Label x-axis 1'

Plot:

enter image description here

Code:

#import plotly.offline as poff
#import plotly.tools as tls

from plotly.subplots import make_subplots
import plotly.graph_objects as go
import pandas as pd

x = list(range(10,20))
y = x
y1 = [10-i for i in x]
y2 = [abs(i-5) for i in x]
y3 = [abs(2*i- 5) for i in x]

fig = make_subplots(rows=2, cols=2, shared_xaxes=True, shared_yaxes=True,
                    #vertical_spacing=0.1,
                    #horizontal_spacing=0.05,
                    print_grid=True,)

fig.append_trace(go.Scatter({'x':x, 'y':y, 'name':'A1'},), 1, 1)
fig.append_trace(go.Scatter({'x':x, 'y':y1, 'name':'B2'},), 2, 2)
fig.append_trace(go.Scatter({'x':x, 'y':y2, 'name':'A2'},), 2, 1)
fig.append_trace(go.Scatter({'x':x, 'y':y3, 'name':'B1'},), 1, 2)

fig['layout'].update(title='Multiple Subplots')

fig.update_xaxes(showline=True, linewidth=1, linecolor='black', mirror=True)
fig.update_yaxes(showline=True, linewidth=1, linecolor='black', mirror=True)

# edit axis labels
fig['layout']['xaxis']['title']='Label x-axis 1'
fig['layout']['xaxis2']['title']='Label x-axis 2'

fig['layout']['xaxis3']['title']='Label x-axis 3'
fig['layout']['xaxis4']['title']='Label x-axis 4'

fig['layout']['yaxis']['title']='Label y-axis 1'
fig['layout']['yaxis2']['title']='Label y-axis 2'

fig['layout']['yaxis3']['title']='Label x-axis 3'
fig['layout']['yaxis4']['title']='Label x-axis 4'

fig.show()
like image 117
vestland Avatar answered Sep 23 '22 12:09

vestland