Subplots with shared x-axes BUT show x-axis for each plot

Hi, is this possible?

As far as I researched, it seems like this seems to be not. But since it’s a very simple functionality, I think it has to be possible somehow. Do you have any advice?


1 Like

Yes, you are right: you can perform some updates to display xaxis ticklabels for all subplots, although they are defined with shared xaxes.


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

fig = make_subplots(
    rows=3, cols=1,

fig.add_trace(go.Scatter(x= [1, 1.75, 2.5, 3.5], y=[-1, 3, 0, 3,  5]),
              row=1, col=1)

fig.add_trace(go.Scatter(x= [1, 1.75, 2.5, 3.5], y=[4, 2, 6, 3,  5]),
              row=2, col=1)
fig.add_trace(go.Scatter(x= [1, 1.5,  2, 2.5, 3, 3.5], y=[4, 2, 6, 3,  5, 0]),
              row=3, col=1)

fig.update_layout(width=700, height=500)

To find out the names of xaxis assigned to each subplot, we are displaying the fig.layout
and get:

    'height': 500,
    'template': '...',
    'width': 700,
    'xaxis': {'anchor': 'y', 'domain': [0.0, 1.0], 'matches': 'x3', 'showticklabels': False},
    'xaxis2': {'anchor': 'y2', 'domain': [0.0, 1.0], 'matches': 'x3', 'showticklabels': False},
    'xaxis3': {'anchor': 'y3', 'domain': [0.0, 1.0]},
    'yaxis': {'anchor': 'x', 'domain': [0.7333333333333333, 1.0]},
    'yaxis2': {'anchor': 'x2', 'domain': [0.36666666666666664, 0.6333333333333333]},
    'yaxis3': {'anchor': 'x3', 'domain': [0.0, 0.26666666666666666]}

Hence the subplots without xaxis ticklabels are the subplots corresponding to (row=1, col=1) , referenced to xaxis, respectively (row=2, col=1), referenced to xaxis2. For these two xaxes we are setting showticklabels=True:

fig.update_layout(xaxis_showticklabels=True, xaxis2_showticklabels=True)

Now displays ticklabels for all three subplots.


not just for this,
but because of all the other threads that you have solved!
Thanks so so much! kudos!


Thank you for appreciation!!! :smiling_face_with_three_hearts:

1 Like