[编辑
编辑]
我想在我的 Chaco 图中的轴上绘制我的 pandas DataFrame 中的日期
我不知道如何将 DataFrame 中的 PeriodIndex 转换为 Chaco 可以接受的东西。
我的数据框索引看起来像这样
>>> dataframe.index
<class 'pandas.tseries.period.PeriodIndex'>
freq: B
[1984-09-07, ..., 2014-01-16]
length: 7404
我能得到的最好的情节是这样的。请注意,日期不正确
这是一个显示问题的示例应用程序。我试图尽可能简洁。
如何将熊猫日期转换为 chaco 日期?
任何帮助是极大的赞赏。
# Enthought library imports
from enable.api import Component, ComponentEditor
from traits.api import HasTraits, Instance
from traitsui.api import UItem, View
# Chaco imports
from chaco.api import ArrayPlotData, Plot, ArrayDataSource, CandlePlot, BarPlot, DataRange1D, \
LinePlot, LinearMapper, VPlotContainer, PlotAxis, PlotGrid, \
FilledLinePlot, add_default_grids, PlotGraphicsContext
from chaco.tools.api import PanTool, ZoomTool
from chaco.scales.api import CalendarScaleSystem
from chaco.scales_tick_generator import ScalesTickGenerator
from pandas import Series, DataFrame, Panel
import numpy as np
import pandas as pd
import datetime
import pickle
import os
def get_my_plot_container():
dataframe = pd.read_pickle(r"C:\AAPL_result.pickle")
# ---------HERE HERE HERE HERE !--------------
#
# I want to convert my pandas DataFrame PeriodIndex into something chaco can use..
df_index = dataframe.index.to_timestamp().values.astype(float)
df_index = df_index / (1000.0 * 3600.0*24.0) # divide by milliseconds in a day. (total hack.)
close = dataframe["Close"].values
index_ads = ArrayDataSource(df_index)
close_ads = ArrayDataSource(close)
x_range = DataRange1D(index_ads)
y_range = DataRange1D(close_ads)
xmapper = LinearMapper(range = x_range)
ymapper = LinearMapper(range = y_range)
tick_gen = ScalesTickGenerator(scale=CalendarScaleSystem())
myplot = FilledLinePlot(
index = index_ads,
value = close_ads,
index_mapper = xmapper,
value_mapper = ymapper,
tick_generator = tick_gen
)
bottom_axis = PlotAxis(component = myplot,
orientation='bottom',
title="Date",
mapper=myplot.x_mapper,
tick_generator = tick_gen,
)
myplot.underlays.append(bottom_axis)
myVplot_container = VPlotContainer(padding=200)
myVplot_container.add(myplot)
return myVplot_container
class Demo(HasTraits):
myplot = Instance(Component)
traits_view = View(UItem('myplot', editor=ComponentEditor()),
width=1920, height=1080, resizable=True,
title="Candlestick plot")
def _myplot_default(self):
return get_my_plot_container()
demo = Demo()
if __name__ == "__main__":
demo.configure_traits()
#--EOF---