如果绘图原点是“左上角”,如何使PanTool和ZoomTool表现?

时间:2013-04-27 10:28:26

标签: enthought chaco

我正在尝试在Chaco图中使用PanTool和ZoomTool,其原点设置为“左上角”,但这些工具的行为并不像预期的那样。平移向相反方向移动,框缩放不一定缩放到突出显示的区域。示例代码是:

plot.plot((x_key, y_key), origin='top left')
plot.tools.append(PanTool(plot))
plot.overlays.append(ZoomTool(plot, tool_mode='box', always_on=False))

如果删除了origin='top left',则平移和缩放行为就像我期望的那样。

1 个答案:

答案 0 :(得分:0)

这是一个非常晚的回复,但基本上需要在主Plot实例上设置原点,而不是调用其plot方法。 (初始化origin时设置的Plot也会传递到plot

import numpy as np

from enable.api import Component, ComponentEditor
from traits.api import HasTraits, Instance
from traitsui.api import UItem, Group, View

from chaco.api import ArrayPlotData, Plot
from chaco.tools.api import PanTool, ZoomTool


class Demo(HasTraits):

    plot = Instance(Component)
    traits_view = View(
        Group(
            UItem('plot', editor=ComponentEditor(size=(900, 500))),
        ),
    )

    def _plot_default(self):
        x = np.linspace(-2.0, 10.0, 100)
        data = ArrayPlotData(x=x, y=np.sin(x))

        # This works
        plot = Plot(data, origin='top left')
        plot.plot(('x', 'y'))

        # This doesn't
        # plot = Plot(data)
        # plot.plot(('x', 'y'), origin='top left')

        plot.tools.append(PanTool(plot))
        zoom = ZoomTool(component=plot, tool_mode="box", always_on=False)
        plot.overlays.append(zoom)
        return plot


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