gpt4 book ai didi

python - 将整数(天数)X 轴转换为月份

转载 作者:太空宇宙 更新时间:2023-11-03 18:45:17 24 4
gpt4 key购买 nike

使用 matplotlib,给定一个在 x 轴上使用表示天数的整数的图表,如下所示:

import matplotlib.pyplot as plt
import numpy.random as nprnd

items = []
items[0] = nprnd.randint(1000, size=470)

y_data = np.row_stack((items[0]))
x_data = np.arange(470)

fig = plt.figure()
ax1 = fig.add_subplot(1, 1, 1)

ax1.fill_between(x_data, 0, items[0], color="#0026cf", alpha=1)

plt.show()

如何转换给出开始日期的 470 天以在 x 轴上显示时间戳?

例如,为图表指定开始日期 2000 年 1 月 1 日 - 现在图表上显示 31,将显示 2000 年 2 月,在 x 值为 58 时,将显示 2000 年 3 月,等等。

最佳答案

您可以使用datetime module生产labels for the x-axis ticks 。您可以使用 strftime() 方法选择自己的格式。

创建 01/01/2000 的日期对象和一天的 timedelta 对象。

import datetime
start = datetime.date(2000, 1, 1)
oneday = datetime.timedelta(1)
print start.strftime('%b %d %Y')
# 'Jan 01 2000'
print start.isoformat()
# '2000-01-01'
print start + oneday
# 2000-01-02
print start + 30*oneday
# 2000-01-31

制作字符串日期列表。

labels = [date.isoformat() for date in (start + oneday*i for i in xrange(0,470))]
print labels[0]
# 2000-01-01
print labels[1]
# 2000-01-02
print labels[31]
# 2000-02-01
print labels[-1]
# 2001-04-14

尝试获取所有 470 个标签是有问题的 - 当您查看整个数据集时,确实没有足够的空间。我对你的示例有一些问题,所以我对其进行了一些修改。

将标签添加到 x 轴刻度

import datetime

import matplotlib.pyplot as plt
import numpy as np
import numpy.random as nprnd

y_data = np.random.randint(0, 1000, size = 470)
##y_data = np.row_stack((items[0]))
x_data = np.arange(470)

fig = plt.figure()
ax1 = fig.add_subplot(1, 1, 1)

ax1.fill_between(x_data, 0, y_data, color="#0026cf", alpha=1)

###### date labels
start = datetime.date(2000, 1, 1)
oneday = datetime.timedelta(1)
labels = [date.isoformat() for date in (start + oneday*i for i in xrange(0,470))]
plt.xticks(x_data, labels, rotation='vertical')

plt.show()
plt.close()

在 x 轴上放大到几周: x-axis zoom

使用每周日期戳更合理一些..进行了几行更改

labels = [date.isoformat() for date in (start + oneday*i for i in xrange(0,470))]
labels = labels[::7]
plt.xticks(x_data[::7], labels, rotation='vertical')

weekly date stamps

关于python - 将整数(天数)X 轴转换为月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19670358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com