在matplotlib中使用带日期的断条设置条宽

2024-09-29 23:22:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建甘特图,但无法确定如何以正确的数据格式定义断条的xwidth部分。我唯一可以使用的格式是日期格式,但栏总是太宽,我宁愿输入天数

我希望下面显示的条形图在2021年9月1日至2021年10月1日(英国日期标准)之间延伸

import matplotlib.pyplot as plt 
import datetime as dt
from datetime import timedelta
from datetime import date
  
fig, gnt = plt.subplots() 
  
# Setting Y-axis limits 
gnt.set_ylim(0, 280) 

# Setting X-axis limits 
datemin = dt.date(2020, 12, 1)
datemax = dt.date(2021, 12, 31)
gnt.set_xlim(datemin, datemax) 
  
gnt.set_xlabel('Date') 
gnt.set_ylabel('Survey') 
  
# Setting ticks on y-axis 
gnt.set_yticks([15,25,35,45,55,65,75,85,95,105,115,125,135,145,155,165,175,185,195,205,215,225,235,245,255,265]) 

# Labelling tickes of y-axis 
gnt.set_yticklabels(['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26'])

  
# Setting graph attribute 
gnt.grid(True) 


gnt.broken_barh([
    (
        date(2021, 9, 1),
        date(2021, 10, 1)
    )],
    (260, 9), facecolors =('tab:orange')) 

fig.set_size_inches(12, 15)

我最后得到的图表如下所示: enter image description here

很明显,这条横线的宽度,我想代表一个月,太宽了

我需要如何格式化breaked_barh函数的xWidth部分?我希望能在几天内完成

提前谢谢


Tags: fromimportdatetimedateas格式dtfig
1条回答
网友
1楼 · 发布于 2024-09-29 23:22:39

对于任何阅读的人来说,我发现了一个相当混乱的解决方案。.breaked_barh函数的持续时间(xrange)部分可以通过将所需天数添加到可能的最小开始日期(01/01/01)来呈现:

import matplotlib.pyplot as plt 
import datetime as dt
from datetime import timedelta
from datetime import date
  
fig, gnt = plt.subplots() 
  
# Setting Y-axis limits 
gnt.set_ylim(0, 280) 

# Setting X-axis limits 
datemin = dt.date(2020, 12, 1)
datemax = dt.date(2021, 12, 31)
gnt.set_xlim(datemin, datemax) 
  
gnt.set_xlabel('Date') 
gnt.set_ylabel('Survey') 
  
# Setting ticks on y-axis 
gnt.set_yticks([15,25,35,45,55,65,75,85,95,105,115,125,135,145,155,165,175,185,195,205,215,225,235,245,255,265]) 

# Labelling tickes of y-axis 
gnt.set_yticklabels(['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26'])

  
# Setting graph attribute 
gnt.grid(True) 


gnt.broken_barh([
    (
        date(2021, 9, 1),
        date(1, 1, 1)+timedelta(days=10) #This adds a width of 10 days
    )],
    (260, 9), facecolors =('tab:orange')) 

fig.set_size_inches(12, 15)

enter image description here

相关问题 更多 >

    热门问题