matpolotlib FixedLocator与日期 [英] matpolotlib FixedLocator with dates

查看:128
本文介绍了matpolotlib FixedLocator与日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我有一个基于日期的X轴,如何使用股票代码API在所需的位置添加股票代码?使用 FixedLocator 不起作用,并导致异常:

 以pd 
的形式导入pd
以plt
的形式导入matplotlib.pyplot以$ p
的形式导入matplotlib.ticker的熊猫= $ d $ date_range('20130101',periods = 6)
系列= pd.Series([1,3,5,8,6,8],index =日期)
p = plt.figure()
series.plot(ax = p.gca())
p.gca()。xaxis.set_major_locator(matplotlib.ticker.FixedLocator(dates))

结果:

 跟踪(最近一次通话最近):
File / media / local_data / languitar / miniconda2 / envs / monitoring / lib / python2.7 / site-packages / matplotlib / backends / backend
_qt5agg.py,第176行,位于__draw_idle_agg
FigureCanvasAgg.draw(self)
File /媒体/local_data/languitar/miniconda2/envs/monitoring/lib/python2.7/site-packages/matplotlib/backends/backend
_agg.py,行474,在平局
self.figure.draw中(self.renderer)
文件 / media / local_data / languitar / miniconda2 / envs / monito ring / lib / python2.7 / site-packages / matplotlib / artist.py,行
61,在draw_wrapper
中draw(artist,renderer,* args,** kwargs)
文件 /media/local_data/languitar/miniconda2/envs/monitoring/lib/python2.7/site-packages/matplotlib/figure.py,行
1159,在平局
func(* args)
文件 /media/local_data/languitar/miniconda2/envs/monitoring/lib/python2.7/site-packages/matplotlib/artist.py,
61行,位于draw_wrapper
draw(艺术家,渲染器,* args,** kwargs)
文件 /media/local_data/languitar/miniconda2/envs/monitoring/lib/python2.7/site-packages/matplotlib/axes/_base.py,
2324行,绘制
a.draw(renderer)
文件 /media/local_data/languitar/miniconda2/envs/monitoring/lib/python2.7/site-packages/matplotlib/artist .py,
61行,在draw_wrapper
draw(艺术家,渲染器,* args,** kwargs)中
File / media / local_data / languitar / miniconda2 / envs / monitoring / lib /python2.7/site-packages/matplotlib/axis.py,第1行
106,在抽奖
ticks_to_draw = self._update_ticks(renderer)
File /media/local_data/languitar/miniconda2/envs/monitoring/lib/python2.7/site-packages/matplotlib/axis中。 py,第1行
038,如果不是mtransforms.interval_contains(interval_expanded,loc),则在_update_ticks
中:
文件 / media / local_data / languitar / miniconda2 / envs / monitoring / lib / python2 .7 / site-packages / matplotlib / transforms.py,
第2780行,位于interval_contains
((a< b)和(a< = val和b> = val))
TypeError:无效的类型提升


解决方案

好,在将日期传递给定位器之前,用 matplotlib.dates.date2num 转换日期时,工作正常。 / p>

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

解决方案

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

这篇关于matpolotlib FixedLocator与日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆