【问题标题】:how to plot arbitrary markers on a pandas data series?如何在熊猫数据系列上绘制任意标记?
【发布时间】:2013-11-25 04:28:56
【问题描述】:

我正在尝试在 pandas 数据系列中放置标记(以在股票市场图表上显示买入/卖出事件)

我可以在使用 pyplot 创建的简单数组上执行此操作,但是我找不到关于如何在 pandas 时间序列中指示任意事件的参考。

也许 pandas 没有内置此功能。有人可以提供帮助,让您可以采取这个系列并沿曲线添加一些任意标记...

import datetime
import matplotlib.pyplot as plt
import pandas
from pandas import Series, date_range
import numpy as np
import random



ts = Series(randn(1000), index=date_range('1/1/2000', periods=1000))
ts = ts.cumsum()

#--  the markers should be another pandas time series with true/false values
#--    We only want to show a mark where the value is True
tfValues = np.random.randint(2, size=len(ts)).astype('bool')
markers = Series(tfValues, index=date_range('1/1/2000', periods=1000))

fig, ax1 = plt.subplots()
ts.plot(ax=ax1)

ax1.plot(markers,'g^')   # This is where I get held up.
plt.show()

【问题讨论】:

    标签: python matplotlib pandas


    【解决方案1】:

    我不得不采取一种稍微不同的方法,完全避免使用 pandas 绘图方法。这有点可惜,因为它们很好地格式化了 x 轴。尽管如此:

    import datetime
    import matplotlib.pyplot as plt
    import numpy as np
    import pandas
    from pandas import Series, date_range
    
    markers = Series([True, False, False, True, True, True, False, False, True, True],
                     index=date_range('1/1/2000', periods=10))
    ts = Series(np.random.uniform(size=10), index=date_range('1/1/2000', periods=10))
    ts = ts.cumsum()
    ts2 = ts[markers]    
    
    fig, ax1 = plt.subplots()
    ax1.plot(ts.index, ts, 'b-')       
    ax1.plot(ts2.index, ts2,'g^')
    fig.autofmt_xdate()
    

    给我:

    【讨论】:

    • 谢谢!太奇怪了,我认为这很常见。果然,你所拥有的对我很有用。
    【解决方案2】:

    使用选项

    ts.plot(marker='o')
    

    或

    ts.plot(marker='.')
    

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 2018-02-10
      • 2021-07-20
      • 2017-06-09
      • 1970-01-01
      相关资源
      最近更新 更多