0

chaco コードを同等の matplotlib コードに変換することは可能ですか?

たとえば、このchaco コードを同等の matplotlib コードに変換したいと思います。私はmatplotライブラリを扱うのが初めてです。したがって、どんな種類の助けも大歓迎です。

コードスニペット

""" Tornado plot example from Brennan Williams """
from enable.api import Component, ComponentEditor
from traits.api import HasTraits, Instance
from traitsui.api import Item, View

# Chaco imports
from chaco.api import ArrayDataSource, BarPlot, DataRange1D, LabelAxis, \
                  LinearMapper, OverlayPlotContainer, PlotAxis
from chaco.example_support import COLOR_PALETTE

class PlotExample(HasTraits):
    plot = Instance(Component)

    traits_view = View(Item('plot', editor=ComponentEditor(), show_label=False),
                resizable=True, title="Tornado Plot",
                width=800, height=600
                )

    def _plot_default(self):
        container = OverlayPlotContainer(bgcolor = "white")
        plots = self._make_curves()
        for plot in plots:
        plot.padding = 60
        container.add(plot)

        bottom_axis = PlotAxis(plot, orientation='bottom')

        label_list=['var a', 'var b', 'var c', 'var d', 'var e', 'var f',
                'var g', 'var h', 'var i']
        vertical_axis = LabelAxis(plot, orientation='left',
                            title='Categories',
                            positions = range(1, 10),
                            labels=label_list)
        vertical2_axis = LabelAxis(plot, orientation='right',
                               positions = range(1, 10),
                               labels=label_list)

        plot.underlays.append(vertical_axis)
        plot.underlays.append(vertical2_axis)
        plot.underlays.append(bottom_axis)

        return container

    def _get_points(self):
        index = linspace(pi/4, 3*pi/2, 9)
        data = sin(index) + 2
        return (range(1, 10), data)

    def _make_curves(self):
        (index_points, value_points) = self._get_points()
        size = len(index_points)

        middle_value=2500000.0
        mid_values=middle_value*ones(size)
        low_values=mid_values-10000.0*value_points
        high_values=mid_values+20000.0*value_points

        idx = ArrayDataSource(index_points)
        vals = ArrayDataSource(low_values, sort_order="none")

        idx2 = ArrayDataSource(index_points)
        vals2 = ArrayDataSource(high_values, sort_order="none")

        starting_vals = ArrayDataSource(mid_values, sort_order="none")

        # Create the index range
        index_range = DataRange1D(idx, low=0.5, high=9.5)
        index_mapper = LinearMapper(range=index_range)

        # Create the value range
        value_range = DataRange1D(vals, vals2, low_setting='auto',
                              high_setting='auto', tight_bounds=False)
        value_mapper = LinearMapper(range=value_range,tight_bounds=False)

        # Create the plot
        plot1 = BarPlot(index=idx, value=vals,
                    value_mapper=value_mapper,
                    index_mapper=index_mapper,
                    starting_value=starting_vals,
                    line_color='black',
                    orientation='v',
                    fill_color=tuple(COLOR_PALETTE[6]),
                    bar_width=0.8, antialias=False)

        plot2 = BarPlot(index=idx2, value=vals2,
                    value_mapper=value_mapper,
                    index_mapper=index_mapper,
                    starting_value=starting_vals,
                    line_color='black',
                    orientation='v',
                    fill_color=tuple(COLOR_PALETTE[1]),
                    bar_width=0.8, antialias=False)

        return [plot1, plot2]


demo = PlotExample()

if __name__ == "__main__":
    demo.configure_traits()

次のようなトルネード図を生成したいと考えています。

竜巻図

4

1 に答える 1