我想将以下数据分为两部分:observed
从2018-09
到2019-11
和predicted
从2019-12
到日期结束列,用matplotlib
,plotly
或seaborn
等分别用实线和虚线绘制它们。
date price pct
0 2018-09 10.599 0.020
1 2018-10 10.808 0.020
2 2018-11 10.418 -0.036
3 2018-12 10.166 -0.024
4 2019-01 9.995 -0.017
5 2019-02 10.663 0.067
6 2019-03 10.559 -0.010
7 2019-04 10.055 -0.048
8 2019-05 10.691 0.063
9 2019-06 10.766 0.007
10 2019-07 10.667 -0.009
11 2019-08 10.504 -0.015
12 2019-09 10.284 -0.021
13 2019-10 10.047 -0.023
14 2019-11 9.717 -0.033
15 2019-12 9.908 -0.029
16 2020-01 9.570 -0.045
17 2020-02 9.754 -0.023
18 2020-03 9.779 -0.025
19 2020-04 9.777 -0.031
20 2020-05 9.932 -0.020
我尝试过如下代码,首先出现错误,其次我还没有绘制pct
。有人可以帮忙吗?谢谢。
df = df.set_index('date')
plt.plot('date', 'price', data=df.loc['2018-09':'2019-11'], marker='o', color='green', linewidth=2)
plt.plot('date', 'price', data=df.loc['2019-12':], marker='o', color='green', linewidth=2, linestyle = '--')
它会生成ValueError: x and y must have same first dimension, but have shapes (1,) and (15,)
编辑:此代码已成功绘制price
的图,但我需要在同一图上绘制pct
。
df['date'] = pd.to_datetime(df['date'])
# https://stackoverflow.com/questions/46230864/split-dataframe-on-the-basis-of-date
split_date ='2019-12-01'
plt.figure(figsize=(10, 5))
plt.plot('date', 'rent_price', data = df.loc[df['date'] <= split_date], marker='o', color='red', linewidth=2)
plt.plot('date', 'rent_price', data = df.loc[df['date'] >= split_date], marker='o', color='green', linewidth=2, linestyle = '--')
答案 0 :(得分:2)
我认为最好使用这样的图来说明您所描述的内容:
完整代码:
/**
* @param dir The directory to list.
* @return A list of files and directories in dir.
* @throws IOException If encountered.
*/
public static List<Path> getList(Path dir) throws IOException {
try (Stream<Path> s = Files.list(dir)) {
return s.collect(Collectors.toList());
}
}
答案 1 :(得分:1)
如果尺寸不同,可以尝试使用子图单独打印数据。 matplotlib网站上有子图的文档和教程。
df = df.set_index('date')
plt.subplot(211)
plt.plot('date', 'rent_price', data=df.loc['2018-09':'2019-11'], marker='o', color='green', linewidth=2)
plt.xlabel('Observed')
plt.subplot(212)
plt.plot('date', 'rent_price', data=df.loc['2019-12':], marker='o', color='green', linewidth=2, linestyle = '--')
plt.xlabel('Predicted')
plt.show()