大熊猫结合线和点图

时间:2018-04-27 12:09:17

标签: python pandas plot

我想在一行中绘制pandas时间序列数据,并将其与一个图中的点数据相结合。 (我有一整年的每日价值和某些特定日期的价值,应该作为积分绘制。)

是否有可能仅将点数据绘制为没有线的标记?我用style = 'x'尝试了它,但是样式应该是空的。

enter image description here

当我使用marker = 'o'时,点之间总会有一条线。

enter image description here

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)

2 个答案:

答案 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()

输出:

enter image description here

答案 1 :(得分:0)

如果我切换绘图命令的顺序,则会出现图例中的标签。 plot with label

fig, (ax1) = plt.subplots(nrows=1, ncols=1, figsize=(12, 10))
df_lines['line_values'].plot(ax=ax1, label='daily values', legend=True, grid=True, sharex=True)
df_points['point_values'].plot(ax=ax1, label='point values', legend=True, grid=True, style = 'o')

感谢您的帮助