我想在一行中绘制pandas时间序列数据,并将其与一个图中的点数据相结合。 (我有一整年的每日价值和某些特定日期的价值,应该作为积分绘制。)
是否有可能仅将点数据绘制为没有线的标记?我用style = 'x'
尝试了它,但是样式应该是空的。
当我使用marker = 'o'
时,点之间总会有一条线。
df_points
point_values
2015-10-31 34.000000
2015-11-30 86.914286
2015-12-14 109.777778
2015-12-29 113.340206
2016-01-13 239.503817
2016-01-19 296.768657
2016-01-27 296.849558
2016-02-02 377.489726
2016-02-10 436.665698
2016-02-24 506.214689
2016-03-02 523.585106
2016-03-15 574.376344
2016-04-01 602.537143
2016-04-15 662.771812
2016-04-29 738.079096
2016-05-15 784.083333
2016-05-31 698.914286
2016-06-14 539.915254
2016-06-29 318.356164
df_lines
line_values
2015-10-31 34.010000
2015-11-30 97.800000
2015-12-14 127.700000
2015-12-29 147.000000
2016-01-13 252.150000
2016-01-19 329.900000
2016-01-27 341.700000
2016-02-02 389.700000
2016-02-10 478.550000
2016-02-24 543.300000
2016-03-02 562.700000
2016-03-15 620.100000
2016-04-01 636.500000
2016-04-15 628.482486
2016-04-29 708.000000
2016-05-15 770.000000
2016-05-31 808.000000
2016-06-14 632.900000
2016-06-29 415.528680
fig, (ax1) = plt.subplots(nrows=1, ncols=1, figsize=(12, 10))
df_points['point_values'].plot(ax=ax1, label='point values', legend=True, grid=True, sharex=True, style = 'o')
df_lines['line_values'].plot(ax=ax1, label='daily values', legend=True, grid=True, sharex=True)
答案 0 :(得分:2)
您可以在线图的顶部绘制散点图以实现此目的。请参阅以下代码。
如果dates
是两个数据框中的index
,
df_lines.index = [pd.to_datetime(d) for d in df_lines.index]
df_points.index = [pd.to_datetime(d) for d in df_points.index]
fig=plt.figure(figsize=(12, 10))
ax1 = fig.add_subplot(111)
ax1.scatter(x=df_points.index, y=df_points['point_values'] ,label='point values')
df_lines.plot(ax=ax1, label='line values', color='darkorange')
ax1.legend()
plt.grid()
plt.show()
输出:
答案 1 :(得分:0)