Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

matpolotlib FixedLocator with dates

In case I have a date-based x-axis, how can I add ticks at desired positions using the ticker API? Using a FixedLocator doesn't work and results in an exception:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker

dates = pd.date_range('20130101',periods=6)
series = pd.Series([1,3,5,8,6,8], index=dates)
p = plt.figure()
series.plot(ax=p.gca())
p.gca().xaxis.set_major_locator(matplotlib.ticker.FixedLocator(dates))

results in:

Traceback (most recent call last):
  File "/media/local_data/languitar/miniconda2/envs/monitoring/lib/python2.7/site-packages/matplotlib/backends/backend
_qt5agg.py", line 176, in __draw_idle_agg
    FigureCanvasAgg.draw(self)
  File "/media/local_data/languitar/miniconda2/envs/monitoring/lib/python2.7/site-packages/matplotlib/backends/backend
_agg.py", line 474, in draw
    self.figure.draw(self.renderer)
  File "/media/local_data/languitar/miniconda2/envs/monitoring/lib/python2.7/site-packages/matplotlib/artist.py", line
 61, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/media/local_data/languitar/miniconda2/envs/monitoring/lib/python2.7/site-packages/matplotlib/figure.py", line
 1159, in draw
    func(*args)
  File "/media/local_data/languitar/miniconda2/envs/monitoring/lib/python2.7/site-packages/matplotlib/artist.py", line
 61, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/media/local_data/languitar/miniconda2/envs/monitoring/lib/python2.7/site-packages/matplotlib/axes/_base.py", 
line 2324, in draw
    a.draw(renderer)
  File "/media/local_data/languitar/miniconda2/envs/monitoring/lib/python2.7/site-packages/matplotlib/artist.py", line
 61, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/media/local_data/languitar/miniconda2/envs/monitoring/lib/python2.7/site-packages/matplotlib/axis.py", line 1
106, in draw
    ticks_to_draw = self._update_ticks(renderer)
  File "/media/local_data/languitar/miniconda2/envs/monitoring/lib/python2.7/site-packages/matplotlib/axis.py", line 1
038, in _update_ticks
    if not mtransforms.interval_contains(interval_expanded, loc):
  File "/media/local_data/languitar/miniconda2/envs/monitoring/lib/python2.7/site-packages/matplotlib/transforms.py", 
line 2780, in interval_contains
    ((a < b) and (a <= val and b >= val))
TypeError: invalid type promotion
like image 337
languitar Avatar asked May 09 '26 12:05

languitar


1 Answers

Ok, when converting the dates with matplotlib.dates.date2num before passing them to the locator things work.

like image 149
languitar Avatar answered May 12 '26 01:05

languitar



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!