Python 绘制系列线将变为曲线
问题是绘制一条日期分布不均的直线。使用系列值数据修复了曲线度问题,但丢失了时间线(日期)。有办法解决这个问题吗Python 绘制系列线将变为曲线,python,pandas,matplotlib,plot,time-series,Python,Pandas,Matplotlib,Plot,Time Series,问题是绘制一条日期分布不均的直线。使用系列值数据修复了曲线度问题,但丢失了时间线(日期)。有办法解决这个问题吗 编辑:为什么日期不能直接映射到x轴上的刻度: 0 -> 2017-02-17, 1 -> 2017-02-20, ... ? 现在橙色线似乎有12个刻度,但只有8个数据点 import pandas as pd import matplotlib.pyplot as plt def straight_line(index): y = [3 + 2*x for x
编辑:为什么日期不能直接映射到x轴上的刻度:
0 -> 2017-02-17,
1 -> 2017-02-20,
... ?
现在橙色线似乎有12个刻度,但只有8个数据点
import pandas as pd
import matplotlib.pyplot as plt
def straight_line(index):
y = [3 + 2*x for x in range(len(index))]
zserie = pd.Series(y, index=index)
return zserie
if __name__ == '__main__':
start = '2017-02-10'
end = '2017-02-17'
index = pd.date_range(start,end)
index1 = pd.DatetimeIndex(['2017-02-17', '2017-02-20', '2017-02-21', '2017-02-22',
'2017-02-23', '2017-02-24', '2017-02-27', '2017-02-28',],
dtype='datetime64[ns]', name='pvm', freq=None)
plt.figure(1, figsize=(8, 4))
zs = straight_line(index)
zs.plot()
zs = straight_line(index1)
zs.plot()
plt.figure(2, figsize=(8, 4))
zs = straight_line(index1)
plt.plot(zs.values)
图表正确地将日期视为连续变量。索引_1的
天数应绘制在17、20、21、22、23、24、27和28的x坐标处。因此,橙色线的图形是正确的
问题在于在直线()
函数中计算y值的方式。您将日期视为只是分类值,而忽略日期之间的间隔。线性回归计算不会做到这一点——它会将日期视为连续值
要在示例代码中获得一条直线,您应该使用td=(index-index[0])
(返回一个熊猫)将index_1
中的值从绝对日期转换为相对差异,然后使用td
中的天数作为计算的x值。我已经在下面的reg\u line()
函数中演示了如何执行此操作:
import pandas as pd
import matplotlib.pyplot as plt
def reg_line(index):
td = (index - index[0]).days #array containing the number of days since the first day
y = 3 + 2*td
zserie = pd.Series(y, index=index)
return zserie
if __name__ == '__main__':
start = '2017-02-10'
end = '2017-02-17'
index = pd.date_range(start,end)
index1 = pd.DatetimeIndex(['2017-02-17', '2017-02-20', '2017-02-21', '2017-02-22',
'2017-02-23', '2017-02-24', '2017-02-27', '2017-02-28',],
dtype='datetime64[ns]', name='pvm', freq=None)
plt.figure(1, figsize=(8, 4))
zs = reg_line(index)
zs.plot(style=['o-'])
zs = reg_line(index1)
zs.plot(style=['o-'])
这将生成下图:
注意:我在图形中添加了点,以明确在图形上绘制的值。如您所见,橙色线是直线,即使在该范围内的某些天没有值。您是否试图创建一条日期间隔不均匀的直线(x轴)或者你想让日期值表现得像一个分类值?第一个图中的橙色线似乎正是你要寻找的图。有什么问题吗?要得到一条直线,你必须调整x轴,使其以与y轴相同的速率进行调整。这对于根据彼此距离不同的日期进行绘图是不起作用的。为什么你需要数据的曲线是一条直线?哦,我应该解释一下,最初的问题是一个常见的任务,将一个时间序列的回归线绘制成同一个图,带日期。回归线应该是直线。为什么日期不直接映射到数据点,比如: