Matplotlib 도구 관리자

Beginner

This tutorial is from open-source community. Access the source code

소개

이 튜토리얼에서는 matplotlib.backend_managers.ToolManager를 사용하여 툴바를 수정하고, 도구를 생성하고, 도구를 추가하고, 도구를 제거하는 방법을 보여줍니다.

VM 팁

VM 시작이 완료되면, 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 접속하십시오.

때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한 사항으로 인해 작업의 유효성 검사는 자동화될 수 없습니다.

학습 중 문제가 발생하면 언제든지 Labby 에게 문의하십시오. 세션 후 피드백을 제공해주시면 문제를 신속하게 해결해 드리겠습니다.

ToolManager에 의해 제어되는 모든 도구 나열

첫 번째 단계는 ToolManager에 의해 제어되는 모든 도구를 나열하는 것입니다. 이는 ListTools라는 사용자 정의 도구를 생성하여 수행할 수 있습니다. ListTools 클래스는 ToolBase를 상속합니다. ListToolstrigger() 메서드는 사용 가능한 모든 도구의 이름, 설명 및 키맵을 출력합니다.

class ListTools(ToolBase):
    """List all the tools controlled by the `ToolManager`."""
    default_keymap = 'm'  ## keyboard shortcut
    description = 'List Tools'

    def trigger(self, *args, **kwargs):
        print('_' * 80)
        fmt_tool = "{:12} {:45} {}".format
        print(fmt_tool('Name (id)', 'Tool description', 'Keymap'))
        print('-' * 80)
        tools = self.toolmanager.tools
        for name in sorted(tools):
            if not tools[name].description:
                continue
            keys = ', '.join(sorted(self.toolmanager.get_tool_keymap(name)))
            print(fmt_tool(name, tools[name].description, keys))
        print('_' * 80)
        fmt_active_toggle = "{!s:12} {!s:45}".format
        print("Active Toggle tools")
        print(fmt_active_toggle("Group", "Active"))
        print('-' * 80)
        for group, active in self.toolmanager.active_toggle.items():
            print(fmt_active_toggle(group, active))

주어진 gid 를 가진 선 표시

두 번째 단계는 GroupHideTool이라는 사용자 정의 도구를 생성하는 것입니다. GroupHideTool 클래스는 ToolToggleBase를 상속합니다. GroupHideToolset_lines_visibility() 메서드는 도구가 활성화되었는지 또는 비활성화되었는지에 따라 지정된 gid를 가진 플롯의 모든 선의 가시성을 True 또는 False 로 설정합니다.

class GroupHideTool(ToolToggleBase):
    """Show lines with a given gid."""
    default_keymap = 'S'
    description = 'Show by gid'
    default_toggled = True

    def __init__(self, *args, gid, **kwargs):
        self.gid = gid
        super().__init__(*args, **kwargs)

    def enable(self, *args):
        self.set_lines_visibility(True)

    def disable(self, *args):
        self.set_lines_visibility(False)

    def set_lines_visibility(self, state):
        for ax in self.figure.get_axes():
            for line in ax.get_lines():
                if line.get_gid() == self.gid:
                    line.set_visible(state)
        self.figure.canvas.draw()

사용자 정의 도구 추가

세 번째 단계는 1 단계와 2 단계에서 생성한 사용자 정의 도구를 추가하는 것입니다. 이는 ToolManageradd_tool() 메서드를 호출하여 수행할 수 있습니다. ListToolsGroupHideTool 도구를 ToolManager에 추가합니다. 또한 Toolbaradd_tool() 메서드를 사용하여 생성된 Show 도구를 Toolbar에 추가합니다.

fig.canvas.manager.toolmanager.add_tool('List', ListTools)
fig.canvas.manager.toolmanager.add_tool('Show', GroupHideTool, gid='mygroup')
fig.canvas.manager.toolbar.add_tool('Show', 'navigation', 1)

도구 제거

네 번째 단계는 Toolbar에서 forward 버튼을 제거하는 것입니다. 이는 ToolManagerremove_tool() 메서드를 호출하여 수행할 수 있습니다.

fig.canvas.manager.toolmanager.remove_tool('forward')

요약

이 튜토리얼에서는 matplotlib.backend_managers.ToolManager를 사용하여 Toolbar 를 수정하고, 사용자 정의 도구를 생성하고, 도구를 추가하고, 도구를 제거하는 방법을 배웠습니다. ToolManager에 의해 제어되는 모든 도구를 나열하는 ListTools라는 사용자 정의 도구를 만들었습니다. 또한, 도구가 활성화되었는지 또는 비활성화되었는지에 따라 지정된 gid를 가진 플롯의 모든 선의 가시성을 True 또는 False 로 설정하는 GroupHideTool이라는 사용자 정의 도구도 만들었습니다. 마지막으로, 사용자 정의 도구를 ToolManager에 추가하고, Show 도구를 Toolbar에 추가했으며, Toolbar에서 forward 버튼을 제거했습니다.