5

我需要在 python 中更改子图标题,即将其旋转 90 度。我很努力,但没有任何成功。

这是我的代码

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')

所以,我想旋转'first_title','second_title''third_title'90 度,这样它们就不会相互重叠。有可能解决这个问题吗?

4

2 回答 2

6

您可以简单地在该行之前添加此代码pyo.plot(fig, filename='file.html')

for annotation in fig['layout']['annotations']: 
    annotation['textangle']=-90

但是,这会导致子图标题与主标题重叠,因此我建议您将其删除。这是最终代码:

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')

这就是你得到的: 在此处输入图像描述

于 2019-03-29T18:12:59.380 回答
1

这个答案链接到Can you alter a subplot title location in plotly? 它寻求正确对齐子图块的答案。

我对 2 x 2 网格上的子图标题也有类似的问题。答案很简单

fig.update_annotations(yshift=20)
于 2021-03-10T09:02:32.940 回答