如何使用线和标记绘制重叠序列?

时间:2018-03-16 19:06:17

标签: python python-3.x pandas matplotlib time-series

鉴于以下数据:

df1

               a       b    c
 1/1/2017   -162    1525     -41
 1/2/2017    192    1530      86
 1/3/2017     33    1520    -124
 1/4/2017    173    1502    -108
 1/5/2017    194    1495     -31
 1/6/2017    -15    1520     -46
 1/7/2017     52    1525     181
 1/8/2017     -2    1530    -135
 1/9/2017     37    1540      65
1/10/2017    197    1530      73

df2

              a
1/3/2017     33
1/6/2017    -15
1/7/2017     52
1/8/2017     -2
1/9/2017     37

我如何使用matplotlib在图表中生成'b'df1并在其上方,将标记放在相同的绘图线上,但使用df2的索引点

所需的图表看起来像这样:

enter image description here

我看了enter image description here,但不能很好地适应它。问题是在示例中他们使用值,但在我的情况下,两个数据集之间共同的部分是索引

这是我尝试的引用问题的代码:

xs = df1['b']
ys = df2['a'] # ---> this doesn't make sense here....
markers_on = df2.index
plt.plot(xs, ys, '-gD', markevery=markers_on)
plt.show()

但是这张图表是空的:

TypeError: <class 'NoneType'> type object None

我也试过

xs = df1['b']
markers_on = list(df2.index)
plt.plot(xs, '-gD', markevery=markers_on)
plt.show()

但是我得到了

ValueError: `markevery` is iterable but not a valid form of numpy fancy indexing

1 个答案:

答案 0 :(得分:2)

市场营销有不同的可能格式。他们都没有使用实际值来标记。在这里,使用值的索引来标记,或者与数据长度相同的布尔数组是有意义的。后者看起来像这样:

try:
    cur.execute('Drop table {}'.format(table_name))
except pyodbc.ProgrammingError:
    cur.execute(create_table)