【问题标题】:How to Customize datetime ticks in Plotly (Python)如何在 Plotly (Python) 中自定义日期时间刻度
【发布时间】:2020-07-30 15:06:29
【问题描述】:

所以我用 Plotly 的 Dash 创建了一个甘特图,如果不是 x 轴刻度,我会很高兴。

这是我的图表:

很好,但是对于 x 轴刻度。我想定制它们以满足我的需要:

  1. 我希望他们从周一(1 月 4 日)开始,而不是周日(1 月 10 日),并像他们已经做的那样每周继续

  2. 刻度标签应该是这样的,而不是“04 Jan”:“KW: 01 ('21)”。在这里,KW 应该是指日历周。

  3. 我不想显示每个刻度标签。如果图表只显示一年的第一个 KW 和每五分之一,那就太好了

所以,我一直在寻找一种方法来做到这一点,并在Plotly Layout References (xaxis-tickvals) 中发现应该有一种顺利的方法来做到这一点。我只需要图表中位置的刻度值列表和标签的刻度文本列表,并且需要将刻度模式设置为“数组”。

由于我的代码太长,我只提供一个小例子。假设这是我的代码:

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 中问过同样的问题,但至今没有得到任何帮助。

感谢您的任何评论!

【问题讨论】:

    标签: python plotly-dash gantt-chart xticks


    【解决方案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) 可能所有这些自定义都会导致您编写一个简单的函数,该函数返回用作刻度的字符串列表。如果您想坚持使用日期时间对象,您可以查看 this 帖子(没有解决方案)作为搜索的入口点。

    编码不错!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-24
      • 2018-11-13
      • 1970-01-01
      • 2021-02-28
      • 2011-04-22
      • 1970-01-01
      • 2021-08-16
      相关资源
      最近更新 更多