所以我用Plotly的Dash创建了一个甘特图,如果不是x轴刻度线的话,我会很高兴。
这是我的图表:
很好,但x轴刻度线。我想根据自己的需要对其进行自定义:
我希望他们从星期一(1月4日)开始,而不是星期日(1月10日),并像他们一样每周继续进行
而不是“ Jan 04”,刻度标签应该是这样的:“ KW:01('21)”。在这里,KW应该表示日历周。
我不想显示每个刻度标签。如果图表仅显示一年的前KW和五分之一
因此,我在寻找一种方法来执行此操作,并在Plotly Layout References (xaxis-tickvals)中发现应该有一种流畅的方法。我只需要为图表中的位置提供一个tickvals列表,为标签提供一个tickmarktext列表,就需要将tickmode设置为“ array”。
由于我的代码太长,我只提供一个例子。假设这是我的代码:
import plotly.figure_factory as ff
import datetime
df = [dict(Task="Job A", Start='2021-01-08', Finish='2021-01-29'),
dict(Task="Job B", Start='2021-01-15', Finish='2021-02-12'),
dict(Task="Job C", Start='2021-01-29', Finish='2021-02-19'),
dict(Task="Job D", Start='2021-02-05', Finish='2021-02-26')]
my_figure = ff.create_gantt(df, showgrid_x=True, showgrid_y=True)
weeks_ticktext = ['KW: 01 (\'21)', '', '', '', 'KW: 05 (\'21)', '', '', '', '']
weeks_tickvals = [datetime.datetime(2021, 1, 4, 0, 0), datetime.datetime(2021, 1, 11, 0, 0),
datetime.datetime(2021, 1, 18, 0, 0), datetime.datetime(2021, 1, 25, 0, 0),
datetime.datetime(2021, 2, 1, 0, 0), datetime.datetime(2021, 2, 8, 0, 0),
datetime.datetime(2021, 2, 15, 0, 0), datetime.datetime(2021, 2, 22, 0, 0),
datetime.datetime(2021, 3, 1, 0, 0)]
my_figure.layout.xaxis['tickmode'] = 'array'
my_figure.layout.xaxis['tickvals'] = weeks_tickvals
my_figure.layout.xaxis['ticktext'] = weeks_ticktext
my_figure.show()
然后,此代码将产生以下图形:
现在,我不明白为什么x轴没有启动并且没有按照我希望的方式显示。
我在Dash Community中也问了同样的问题,但到目前为止没有得到任何帮助。
感谢您的任何评论!
答案 0 :(得分:1)
1)要设置开始日期,您可以使用类似的方法调整轴范围
my_figure.layout['xaxis'].update(range=[min, max])
您必须弄清楚如何找到标签的最小和最大。
2)如here所述,实现所需内容的最简单方法是在布局中设置xaxis_tickformat。尝试添加行
my_figure.layout['xaxis_tickformat'] = '%d %B whatever <br>%Y'
恰好在最后一行之前,按照here
中的说明操作并使用格式字符串3)可能所有这些自定义操作都会使您编写一个简单的函数,该函数返回用作滴答声的字符串列表。如果您想使用datetime对象,可以选中this帖子(没有解决方案)作为搜索的入口点。
良好的编码!