我使用matplotlib显示股票价格随时间的走势。我想关注最近90天,然后预测接下来的14天。我有最近90天的数据和我的预测,但我想用不同的颜色来描绘我的预测,所以很清楚它们是不同的。
我该怎么做?
如果我只是在我的代码中添加第二次plot()
调用,则预测将从与我90天的数据相同的点开始并被覆盖,这不是我想要的。
现在我正在这样做:
df[-90:]["price"].plot()
plt.show()
谢谢!
答案 0 :(得分:1)
import matplotlib.pyplot as plt
import numpy as np
last90days = np.random.rand(90)
next14days = np.random.rand(14)
plt.plot(np.arange(90), last90days)
plt.plot(np.arange(90, 90+14), next14days)
plt.show()
答案 1 :(得分:1)
希望这就是你想要的:
import pandas as pd
import numpy as np; np.random.seed(1)
import matplotlib.pyplot as plt
datelist = pd.date_range(pd.datetime(2018, 1, 1), periods=104)
df = pd.DataFrame(np.cumsum(np.random.randn(104)),
columns=['price'], index=datelist)
plt.plot(df[:90].index, df[:90].values)
plt.plot(df[90:].index, df[90:].values)
# If you don't like the break in the graph, change 90 to 89 in the above line
plt.gcf().autofmt_xdate()
plt.show()
答案 2 :(得分:1)
简答:
使用pd.merge()并在两个不同的系列中充分利用缺失的valus来获得两条不同颜色的线条。关于您正在使用什么类型的数据帧索引(日期,整数和字符串),此建议将非常灵活。这就是你要得到的:
答案很长:
关于......的详细信息。
我想关注过去90天,然后预测接下来的14天。
...我将假设您使用的是具有每日索引的数据框。我还假设您知道数据集的索引值为90天,数据集为14天。
这是一个包含104个观测值(随机数据)的数据框:
代码段1:
import pandas as pd
import numpy as np
np.random.seed(12)
rows = 104
df = pd.DataFrame(np.random.randint(-4,5,size=(rows, 1)), columns=['data'])
datelist = pd.date_range(pd.datetime(2018, 1, 1).strftime('%Y-%m-%d'), periods=rows).tolist()
df['dates'] = datelist
df = df.set_index(['dates'])
df.index = pd.to_datetime(df.index)
df = df.cumsum()
df.plot()
剧情1:
为了复制您的设置,我将数据帧分成两个不同的帧,其中包含90个观察值(价格)和14天(预测值)。这样,你将有两个不同的数据集,但相关的索引将是连续的 - 我假设你是实际情况。
代码段2:
df_90 = df[:90].copy(deep = True)
df_14 = df[-14:].copy(deep = True)
df_90.columns = ['price']
df_14.columns = ['predictions']
df_90.plot()
df_14.plot()
剧情2:
现在您可以将它们合并在一起,这样您就可以获得包含两列数据和预测的数据框。当然,你最终会得到一些缺失的数据,但这正是你在绘制它时会给你两条不同颜色的线。
摘录3:
df_all = pd.merge(df_90, df_14, how = 'outer', left_index=True, right_index=True)
df_all.plot()
剧情3:
我希望建议的解决方案符合您的实际情况。如果有关索引的详细信息将成为一个问题,请告诉我,我也会看一下。
以下是简单复制粘贴的完整代码:
import pandas as pd
import numpy as np
np.random.seed(12)
rows = 104
df = pd.DataFrame(np.random.randint(-4,5,size=(rows, 1)), columns=['data'])
datelist = pd.date_range(pd.datetime(2018, 1, 1).strftime('%Y-%m-%d'), periods=rows).tolist()
df['dates'] = datelist
df = df.set_index(['dates'])
df.index = pd.to_datetime(df.index)
df = df.cumsum()
df.plot()
df_90 = df[:90].copy(deep = True)
df_14 = df[-14:].copy(deep = True)
df_90.columns = ['price']
df_14.columns = ['predictions']
df_90.plot()
df_14.plot()
df_all = pd.merge(df_90, df_14, how = 'outer', left_index=True, right_index=True)
df_all.plot()