python - Plotly:如何为甘特图的 y 轴标签腾出更多空间
问题描述
我正在绘制甘特图,但 Y 标签(任务标签)未显示:
下面是一个正在尝试做的例子。
data = [
dict(Task='Morning Sleep', Start='2016-01-01', Finish='2016-01-01 6:00:00', Resource='Sleep'),
dict(Task='Breakfast', Start='2016-01-01 7:00:00', Finish='2016-01-01 7:30:00', Resource='Food'),
dict(Task='Work', Start='2016-01-01 9:00:00', Finish='2016-01-01 11:25:00', Resource='Brain'),
dict(Task='Break', Start='2016-01-01 11:30:00', Finish='2016-01-01 12:00:00', Resource='Rest'),
dict(Task='Lunch', Start='2016-01-01 12:00:00', Finish='2016-01-01 13:00:00', Resource='Food'),
dict(Task='Work', Start='2016-01-01 13:00:00', Finish='2016-01-01 17:00:00', Resource='Brain'),
dict(Task='Exercise', Start='2016-01-01 17:30:00', Finish='2016-01-01 18:30:00', Resource='Cardio'),
dict(Task='Post Workout Rest', Start='2016-01-01 18:30:00', Finish='2016-01-01 19:00:00', Resource='Rest'),
dict(Task='Dinner', Start='2016-01-01 19:00:00', Finish='2016-01-01 20:00:00', Resource='Food'),
dict(Task='Evening Sleep', Start='2016-01-01 21:00:00', Finish='2016-01-01 23:59:00', Resource='Sleep')
]
df = pd.DataFrame(data)
colors = dict(Cardio = 'rgb(46, 137, 205)',
Food = 'rgb(114, 44, 121)',
Sleep = 'rgb(198, 47, 105)',
Brain = 'rgb(58, 149, 136)',
Rest = 'rgb(107, 127, 135)')
fig = ff.create_gantt(df, colors=colors, index_col='Resource', title='Daily Schedule',
show_colorbar=True, bar_width=0.8, showgrid_x=True, showgrid_y=True)
py.iplot(fig, filename='gantt-hours-minutes', world_readable=True)
结果如下图:
如何在左侧腾出更多空间以便我可以看到整个标签?
解决方案
简短的回答:
选项 1:指定fig.update_yaxes(automargin=True)
或者
选项 2:l=200
调整左边距fig.update(margin=go.Layout(l=200))
细节:
选项1:
这可能是版本问题或仅与iplot
. 我正在使用plotly.graph_objects
,为了重现您的问题,我必须主动设置automargin=False
:
情节 1.1: fig.update_yaxes(automargin=False)
代码 1:
import plotly.graph_objects as go
import plotly.io as pio
import plotly.figure_factory as ff
import plotly.graph_objects as go
import numpy as np
import pandas as pd
pio.renderers.default = 'jupyterlab'
#pio.renderers.default = 'browser'
data = [
dict(Task='Morning Sleep', Start='2016-01-01', Finish='2016-01-01 6:00:00', Resource='Sleep'),
dict(Task='Breakfast', Start='2016-01-01 7:00:00', Finish='2016-01-01 7:30:00', Resource='Food'),
dict(Task='Work', Start='2016-01-01 9:00:00', Finish='2016-01-01 11:25:00', Resource='Brain'),
dict(Task='Break', Start='2016-01-01 11:30:00', Finish='2016-01-01 12:00:00', Resource='Rest'),
dict(Task='Lunch', Start='2016-01-01 12:00:00', Finish='2016-01-01 13:00:00', Resource='Food'),
dict(Task='Work', Start='2016-01-01 13:00:00', Finish='2016-01-01 17:00:00', Resource='Brain'),
dict(Task='Exercise', Start='2016-01-01 17:30:00', Finish='2016-01-01 18:30:00', Resource='Cardio'),
dict(Task='Post Workout Rest', Start='2016-01-01 18:30:00', Finish='2016-01-01 19:00:00', Resource='Rest'),
dict(Task='Dinner', Start='2016-01-01 19:00:00', Finish='2016-01-01 20:00:00', Resource='Food'),
dict(Task='Evening Sleep', Start='2016-01-01 21:00:00', Finish='2016-01-01 23:59:00', Resource='Sleep')
]
df = pd.DataFrame(data)
colors = dict(Cardio = 'rgb(46, 137, 205)',
Food = 'rgb(114, 44, 121)',
Sleep = 'rgb(198, 47, 105)',
Brain = 'rgb(58, 149, 136)',
Rest = 'rgb(107, 127, 135)')
fig = ff.create_gantt(df, colors=colors, index_col='Resource', title='Daily Schedule',
show_colorbar=True, bar_width=0.8, showgrid_x=True, showgrid_y=True)
fig.update_yaxes(automargin=False)
fig.show()
目前(我在 Plotly 上'4.2.0'
),设置automargin=True
或不指定它会给你这个:
情节 1.2: fig.update_yaxes(automargin=True)
选项 2: fig.update(margin=go.Layout(l=200))
情节 2.1:
我为绘图区域添加了边框,并为免费添加了颜色以说明正在调整的内容。
情节2:
代码 2:
import plotly.graph_objects as go
import plotly.io as pio
import plotly.figure_factory as ff
import plotly.graph_objects as go
import numpy as np
import pandas as pd
pio.renderers.default = 'jupyterlab'
#pio.renderers.default = 'browser'
data = [
dict(Task='Morning Sleep', Start='2016-01-01', Finish='2016-01-01 6:00:00', Resource='Sleep'),
dict(Task='Breakfast', Start='2016-01-01 7:00:00', Finish='2016-01-01 7:30:00', Resource='Food'),
dict(Task='Work', Start='2016-01-01 9:00:00', Finish='2016-01-01 11:25:00', Resource='Brain'),
dict(Task='Break', Start='2016-01-01 11:30:00', Finish='2016-01-01 12:00:00', Resource='Rest'),
dict(Task='Lunch', Start='2016-01-01 12:00:00', Finish='2016-01-01 13:00:00', Resource='Food'),
dict(Task='Work', Start='2016-01-01 13:00:00', Finish='2016-01-01 17:00:00', Resource='Brain'),
dict(Task='Exercise', Start='2016-01-01 17:30:00', Finish='2016-01-01 18:30:00', Resource='Cardio'),
dict(Task='Post Workout Rest', Start='2016-01-01 18:30:00', Finish='2016-01-01 19:00:00', Resource='Rest'),
dict(Task='Dinner', Start='2016-01-01 19:00:00', Finish='2016-01-01 20:00:00', Resource='Food'),
dict(Task='Evening Sleep', Start='2016-01-01 21:00:00', Finish='2016-01-01 23:59:00', Resource='Sleep')
]
df = pd.DataFrame(data)
colors = dict(Cardio = 'rgb(46, 137, 205)',
Food = 'rgb(114, 44, 121)',
Sleep = 'rgb(198, 47, 105)',
Brain = 'rgb(58, 149, 136)',
Rest = 'rgb(107, 127, 135)')
fig = ff.create_gantt(df, colors=colors, index_col='Resource', title='Daily Schedule',
show_colorbar=True, bar_width=0.8, showgrid_x=True, showgrid_y=True)
# add borders
fig.update_xaxes(showline=True, linewidth=1, linecolor='black', mirror=True)
fig.update_yaxes(showline=True, linewidth=1, linecolor='black', mirror=True)
fig.update_yaxes(automargin=False)
fig.update_layout(
autosize=False,
width=500,
height=500,
margin=go.layout.Margin(
l=150,
r=5,
b=100,
t=100,
pad=4
),
paper_bgcolor="LightSteelBlue",
)
fig.show()
现在你应该能够得到你想要的任何一种方式。
推荐阅读
- c++ - 颤振,从c ++ opencv获取图像作为数据
- android - 将 RecyclerView 适配器的结果返回给 MainActvity.kt?
- c# - 为什么从 HttpClient.GetAsync 调用时,.Net 5 中的 Azure 函数 Http 触发器中缺少我的标头数据
- node.js - 如何用 es6(没有打字稿)开玩笑地模拟 Prisma 客户端?
- c++ - 四元数旋转忽略偏航
- git - Phabricator:HEAD 与 dc0f 分离
- javascript - Main.js 文件导致整个页面崩溃
- html - 右侧的下拉菜单
- reactjs - Expo AuthSession 避免要求您登录其他服务
- c++ - C++派生类虚函数未被覆盖