Reputation: 4149
I need to change subplot title in python plotly, namely, rotate it by 90 degrees. I tried hard but without any success.
Here is my code
import plotly.offline as pyo
import plotly.graph_objs as go
from plotly import tools
trace1 = go.Bar(
x=[1, 2, 3],
y=[10, 11, 12]
)
trace2 = go.Bar(
x=[1, 2, 3],
y=[100, 110, 120],
)
trace3 = go.Bar(
x=[1, 2, 3],
y=[1000, 1100, 1200],
)
fig = tools.make_subplots(rows=1, cols=3,
shared_xaxes=True, shared_yaxes=True,
vertical_spacing=0.001,
subplot_titles = ('first_title', 'second_title', 'third_title'))
fig.append_trace(trace1, 1, 1)
fig.append_trace(trace2, 1, 2)
fig.append_trace(trace3, 1, 3)
fig['layout'].update(height=600, width=600, title='main_title')
pyo.plot(fig, filename='file.html')
So, I want to rotate 'first_title'
, 'second_title'
and 'third_title'
by 90 degrees so that they do not overlap at each other. Is it possible to tackle this problem?
Upvotes: 9
Views: 16167
Reputation: 1770
You could also update text angles in one line
fig.update_annotations(textangle=-90)
Upvotes: 0
Reputation: 1478
This answer is linked to Can you alter a subplot title location in plotly? which seeks an answer to getting the subplot tiles aligned correctly.
I had a similar problem with subplot titles on a 2 x 2 grid. The answer was simply
fig.update_annotations(yshift=20)
Upvotes: 8
Reputation: 3639
you can simply add this code before the pyo.plot(fig, filename='file.html')
line:
for annotation in fig['layout']['annotations']:
annotation['textangle']=-90
However, this will cause subplot titles overlapping the main title, so I suggest you to remove it. This is the final code:
import plotly.offline as pyo
import plotly.graph_objs as go
from plotly import tools
trace1 = go.Bar(
x=[1, 2, 3],
y=[10, 11, 12]
)
trace2 = go.Bar(
x=[1, 2, 3],
y=[100, 110, 120],
)
trace3 = go.Bar(
x=[1, 2, 3],
y=[1000, 1100, 1200],
)
fig = tools.make_subplots(rows=1, cols=3,
shared_xaxes=True, shared_yaxes=True,
vertical_spacing=0.001,
subplot_titles = ('first_title', 'second_title', 'third_title'))
fig.append_trace(trace1, 1, 1)
fig.append_trace(trace2, 1, 2)
fig.append_trace(trace3, 1, 3)
fig['layout'].update(height=600, width=600, title='')
# rotate all the subtitles of 90 degrees
for annotation in fig['layout']['annotations']:
annotation['textangle']=-90
pyo.plot(fig, filename='file.html')
Upvotes: 8