gpt4 book ai didi

python - matplotlib 只有工作日没有周末在 x 轴上与 plot_date

转载 作者:太空狗 更新时间:2023-10-30 01:13:25 27 4
gpt4 key购买 nike

我有以下持续存在的问题:

下面的代码应该画一条直线:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
d = pd.date_range(start="1/1/2012", end="2/1/2012", freq="B")
v = np.linspace(1,10,len(d))
plt.plot_date(d,v,"-")

但我得到的只是一条锯齿线,因为“​​plot_date”以某种方式用周末填满了“d”中的日期。

有没有办法强制 matplotlib 按原样使用我的日期(仅限工作日)而不用周末日期归档?

Jagged line instead of straight one

>>>d
DatetimeIndex(['2012-01-02', '2012-01-03', '2012-01-04', '2012-01-05',
'2012-01-06', '2012-01-09', '2012-01-10', '2012-01-11',
'2012-01-12', '2012-01-13', '2012-01-16', '2012-01-17',
'2012-01-18', '2012-01-19', '2012-01-20', '2012-01-23',
'2012-01-24', '2012-01-25', '2012-01-26', '2012-01-27',
'2012-01-30', '2012-01-31', '2012-02-01'],
dtype='datetime64[ns]', freq='B')

最佳答案

plot_date 做了一个技巧,它将日期转换为自 1-1-1 以来的天数并使用这些数字绘制,然后再次将刻度转换为日期以绘制漂亮的刻度标签。所以每天使用 plot_date 算作 1,不管是不是生意。

您可以根据统一的数字范围绘制数据,但如果您希望将日期作为刻度标签,则需要自己完成。

d = pd.date_range(start="1/1/2012", end="2/1/2012", freq="B")
v = np.linspace(1,10,len(d))

plt.plot(range(d.size), v)
xticks = plt.xticks()[0]
xticklabels = [(d[0] + x).strftime('%Y-%m-%d') for x in xticks.astype(int)]
plt.xticks(xticks, xticklabels)
plt.autoscale(True, axis='x', tight=True)

enter image description here

但请注意,标签可能会产生误导。 2012-01-02 和 2012-01-09 之间的段代表五天,而不是七天。

关于python - matplotlib 只有工作日没有周末在 x 轴上与 plot_date,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35397562/

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