有没有办法在日期时间上使用 yyyy-mm-w 格式进行绘图?

Is there a way to use a yyyy-mm-w format on datetime for plotting?

我有一些按周观察和记录的数据,我正在尝试使用 matplotlib 绘制这些数据。我目前使用日期格式 yyyymmw,其中 w 代表一个月中的第几周(可以采用 1 到 5 之间的任何值)。每周从周二开始到周一结束,除非本月的 end/start 将本周一分为二。

我的问题是:是否有支持这些日期类型的 datetime 格式?

以下是数据示例:

+ --------+-------+------+
|   week  | Sugar | Soy  |
+ --------+-------+------+
| 2019121 | 534.3 | 49.1 |
| 2019122 | 423.6 | 45.2 |
+ --------+-------+------+

你可以看看matplotlib的日期tickers and formatters

本质上,给定一个 Axes 对象,比如 ax,您可以为轴设置一个定位器,然后设置一个格式化程序。 例如,您可以使用 WeekdayLocator to tick every Monday, and use a DateFormatter 实例化 "%y-%m-%W" 来将每个日期显示为 yyyy-mm-w.

因为我已经能够克服这个问题,所以有一点更新。正如@ImportanceOfBeingErnest 指出的那样,无法将此格式转换为日期时间格式。因此,我在每周的第一天使用日期时间和日历进行转换。日历真的很有帮助。这是我的代码:

from datetime import datetime
import calendar
def transform_week_into_days(week): #week example: '2018031'
    week = str(week)
    year = week[:4]
    month = week[4:6]
    week = week[6]
    month_year = year+'-'+month
    calendar = calendar.monthcalendar(int(ano), int(mes))
    week_start = []
    for i in range(len(calendar)):
        for j in range(len(calendar[-1])):
            if calendar[i][j] != 0:
                day = str(month_year)+'-'+str(var[i][j])
                datetime_object = datetime.strptime(day, '%Y-%m-%d')
                if datetime_object.weekday() != 5 and datetime_object.weekday() != 6: #check if the first day of week is saturday or sunday
                    week_start.append(day)
                break
    return week_start[int(week)-1]

希望对有需要的人有所帮助。