查科酒吧地块

时间:2015-02-05 01:46:23

标签: enthought chaco

我真的努力了解如何构建chaco bar情节。

我一直在研究一个在线示例,并将其简化为以下简化代码:

import numpy as np
from traits.api import HasTraits, Instance
from traitsui.api import View, Item
from chaco.api import BarPlot, ArrayDataSource, DataRange1D, LinearMapper
from enable.api import ComponentEditor

class MyBarPlot(HasTraits):
    plot = Instance(BarPlot)

    traits_view = View(
        Item('plot',editor=ComponentEditor(), show_label=False))

    def _plot_default(self):
        idx = np.array([1, 2, 3, 4, 5])
        vals = np.array([2, 4, 7, 4, 3])

        index = ArrayDataSource(idx)
        index_range = DataRange1D(index, low=0.5, high=5.5)
        index_mapper = LinearMapper(range=index_range)

        value = ArrayDataSource(vals)
        value_range = DataRange1D(value, low=0)
        value_mapper = LinearMapper(range=value_range)

        plot = BarPlot(index=index, value=value,
                       value_mapper=value_mapper,
                       index_mapper=index_mapper)
        return plot

if __name__ == "__main__":
    myplot = MyBarPlot()
    myplot.configure_traits()

毋庸置疑,我的尝试并没有奏效。当我运行这段代码时(在ipython笔记本中),我得到的是一个空白的绘图窗口,里面装满了黑色。

我怀疑我的错误可能与' valuemapper'条目,因为我不太了解这些是什么。对于我的代码错误的任何指示,我感激不尽。

更一般地说,这种编码方法对我来说似乎很复杂 - 是否有更简单的方法来制作chaco条形图?

1 个答案:

答案 0 :(得分:3)

不幸的是,bar_width的{​​{1}}特征并不会在这里变得聪明。数据空间中的默认宽度为10,这完全超出了绘图的宽度。要解决此问题,您可以手动调整宽度:

BarPlot

请注意,这仍然不会为您提供正确的“条形图”,因为您将缺少周围的轴装饰和其他组件。最简单的方法是使用chaco的 plot = BarPlot(index=index, value=value, value_mapper=value_mapper, index_mapper=index_mapper, bar_width=0.8) 对象。

以下是向Plot添加BarPlot个实例的示例:

https://github.com/enthought/chaco/blob/master/examples/demo/tornado.py

这是一个使用Plot中的plot便捷方法创建条形图的示例:

https://github.com/enthought/chaco/blob/master/examples/demo/basic/bar_plot_stacked.py

是的,“情节”非常严重超载(Chaco - Getting multiple data series to use the same axes and maps)。