How do I plot only weekdays using Python's matplotlib candlestick?

前端 未结 2 820
一个人的身影
一个人的身影 2020-12-01 17:46

I\'m not managing to plot matplotlib.finance.candlestick without the weekends (blank spaces between every 5 candlesticks). The example from Matplotlib\'s website doesn\'t e

相关标签:
2条回答
  • 2020-12-01 17:52

    While @JMJR's answer works, I find this to be more robust:

    def plot(x):
        plt.figure()
        plt.title("VIX curve")
        def idx(val=[0]):
            val[0] = val[0] + 1
            return val[0]
        d = collections.defaultdict(idx)
        # give each date an index
        [d[t] for t in sorted(x.index.get_level_values('baropen_datetime').unique())]
        # use the index
        x['idx'] = [d[t] for t in x.index.get_level_values('baropen_datetime')]
        # plot using index
        x.groupby('code').apply(lambda y: plt.plot(y.idx.values,
                                                   y.close.values,
                                                   label=y.index.get_level_values('code')[0]))
        plt.legend()
        plt.show()
        plt.close()
    
    0 讨论(0)
  • 2020-12-01 17:53

    After your 'quotes' line:

    weekday_quotes = [tuple([i]+list(quote[1:])) for i,quote in enumerate(quotes)]
    

    then

    candlestick(ax, weekday_quotes, width=0.6)
    

    This will plot the data without the gaps between weekdays, now you have to change the xticks back to dates, preferably mondays. Assuming your first quote was a monday:

    import matplotlib.dates as mdates
    
    ax.set_xticks(range(0,len(weekday_quotes),5))
    ax.set_xticklabels([mdates.num2date(quotes[index][0]).strftime('%b-%d') for index in ax.get_xticks()])
    

    This is pretty gross but seems to get the job done - good luck!

    0 讨论(0)
提交回复
热议问题