首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Pandas日期转换为符合Chaco标准的日期

将Pandas日期转换为符合Chaco标准的日期
EN

Stack Overflow用户
提问于 2014-02-27 14:14:37
回答 1查看 308关注 0票数 1

[编辑

编辑]

我想在查科图的斧头上画出我的熊猫DataFrame的日期。

我不知道如何将PeriodIndex中的DataFrame转换成查科可以接受的东西。

我的dataframe索引如下

代码语言:javascript
复制
>>> dataframe.index
<class 'pandas.tseries.period.PeriodIndex'>
freq: B
[1984-09-07, ..., 2014-01-16]
length: 7404

我能得到的最好的情节是这样的。请注意,日期不正确。

下面是一个演示问题的示例应用程序。我试着尽量简明扼要。

我如何将熊猫枣转换成查科枣?

任何帮助都是非常感谢的。

代码语言:javascript
复制
# 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---
EN

回答 1

Stack Overflow用户

发布于 2018-01-05 21:02:19

我认为下面的内容类似于用DataFrames索引绘制Pandas DataFrames的当前最佳实践:

代码语言:javascript
复制
import numpy as np
from pandas import DataFrame, date_range

from chaco.api import ArrayPlotData, PlotAxis
from chaco.shell.scaly_plot import ScalyPlot
from chaco.scales.api import CalendarScaleSystem
from enable.api import ComponentEditor
from traits.api import HasTraits, Instance
from traitsui.api import Item, View


class DateTimeIndexPlot(HasTraits):
    plot = Instance(ScalyPlot)

    def _plot_default(self):
        df = DataFrame(
            np.random.randn(10, 2),
            index=date_range("01/01/2018", periods=10, frequency="D"),
            columns=['A', 'B'],
        )
        data = ArrayPlotData(
            x=df.index.values.astype('datetime64[s]').astype(float),
            y_a=df['A'],
            y_b=df['B'],
            )
        plot = ScalyPlot(
            data,
            linear_scale_factory=CalendarScaleSystem,
            y_axis=PlotAxis(orientation='left')
        )
        plot.plot(('x', 'y_a'))
        plot.plot(('x', 'y_b'))
        return plot

    traits_view = View(
        Item('plot', editor=ComponentEditor(), show_label=False),
        title="Chaco plot - DataFrame with DateTimeIndex"
        )

if __name__ == '__main__':
    dtip = DateTimeIndexPlot()
    dtip.configure_traits()

请注意,我将标准刻度系统设置为CalendarScaleSystem,然后用PlotAxis重写它,以使默认的刻度生成器返回。我在Chaco v4.7.1中的结果如下所示:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22071116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档