使用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月出现,等等。
答案 0 :(得分:1)
您可以使用datetime module制作labels for the x-axis ticks。您可以使用strftime()方法选择自己的格式。
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个标签是有问题的 - 当您查看整个数据集时,实际上没有足够的空间。我的示例遇到了一些问题所以我稍微修改了一下。
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轴上放大几周:
使用每周日期戳更合理..几行更改
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')