Чако бар участки

Я действительно изо всех сил пытаюсь понять, как строить чако-бары.

Я перебрал онлайн-пример и сократил его до следующего упрощенного кода:

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', так как я не совсем понимаю, для чего они нужны. Я был бы благодарен за любые указатели на мою ошибку кода.

В более общем смысле этот подход к кодированию кажется мне очень сложным - есть ли более простой способ составлять графики в виде чако-баров?

1 ответ

Решение

К сожалению, bar_width черта BarPlot не пытается быть умным здесь. По умолчанию используется ширина в пространстве данных, равная 10, что полностью перекрывает ширину графика. Чтобы это исправить, вы можете отрегулировать ширину вручную:

 plot = BarPlot(index=index, value=value,
                value_mapper=value_mapper,
                index_mapper=index_mapper,
                bar_width=0.8)

Обратите внимание, что это все равно не даст вам правильного "гистограммы", потому что вам не хватит декораций окружающих осей и других компонентов. Самый простой способ сделать это - использовать Chaco's. Plot объект.

Вот пример, который добавляет BarPlot экземпляр для Plot:

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 - Получение нескольких рядов данных для использования одних и тех же осей и карт).

Другие вопросы по тегам