有没有办法在日期时间上使用 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]
希望对有需要的人有所帮助。
我有一些按周观察和记录的数据,我正在尝试使用 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]
希望对有需要的人有所帮助。