mirror of
https://github.com/Estom/notes.git
synced 2026-04-10 14:28:00 +08:00
matplotlib & pandas
This commit is contained in:
@@ -0,0 +1,96 @@
|
||||
# 工具管理
|
||||
|
||||
此示例演示如何:
|
||||
|
||||
- 修改工具栏。
|
||||
- 创建工具。
|
||||
- 添加工具。
|
||||
- 删除工具
|
||||
|
||||
可以使用 matplotlib.backend_managers.ToolManager
|
||||
|
||||
```python
|
||||
import matplotlib.pyplot as plt
|
||||
plt.rcParams['toolbar'] = 'toolmanager'
|
||||
from matplotlib.backend_tools import ToolBase, ToolToggleBase
|
||||
|
||||
|
||||
class ListTools(ToolBase):
|
||||
'''List all the tools controlled by the `ToolManager`'''
|
||||
# keyboard shortcut
|
||||
default_keymap = 'm'
|
||||
description = 'List Tools'
|
||||
|
||||
def trigger(self, *args, **kwargs):
|
||||
print('_' * 80)
|
||||
print("{0:12} {1:45} {2}".format(
|
||||
'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("{0:12} {1:45} {2}".format(
|
||||
name, tools[name].description, keys))
|
||||
print('_' * 80)
|
||||
print("Active Toggle tools")
|
||||
print("{0:12} {1:45}".format("Group", "Active"))
|
||||
print('-' * 80)
|
||||
for group, active in self.toolmanager.active_toggle.items():
|
||||
print("{0:12} {1:45}".format(str(group), str(active)))
|
||||
|
||||
|
||||
class GroupHideTool(ToolToggleBase):
|
||||
'''Show lines with a given gid'''
|
||||
default_keymap = 'G'
|
||||
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):
|
||||
gr_lines = []
|
||||
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()
|
||||
|
||||
|
||||
fig = plt.figure()
|
||||
plt.plot([1, 2, 3], gid='mygroup')
|
||||
plt.plot([2, 3, 4], gid='unknown')
|
||||
plt.plot([3, 2, 1], gid='mygroup')
|
||||
|
||||
# Add the custom tools that we created
|
||||
fig.canvas.manager.toolmanager.add_tool('List', ListTools)
|
||||
fig.canvas.manager.toolmanager.add_tool('Show', GroupHideTool, gid='mygroup')
|
||||
|
||||
|
||||
# Add an existing tool to new group `foo`.
|
||||
# It can be added as many times as we want
|
||||
fig.canvas.manager.toolbar.add_tool('zoom', 'foo')
|
||||
|
||||
# Remove the forward button
|
||||
fig.canvas.manager.toolmanager.remove_tool('forward')
|
||||
|
||||
# To add a custom tool to the toolbar at specific location inside
|
||||
# the navigation group
|
||||
fig.canvas.manager.toolbar.add_tool('Show', 'navigation', 1)
|
||||
|
||||
plt.show()
|
||||
```
|
||||
|
||||
## 下载这个示例
|
||||
|
||||
- [下载python源码: toolmanager_sgskip.py](https://matplotlib.org/_downloads/toolmanager_sgskip.py)
|
||||
- [下载Jupyter notebook: toolmanager_sgskip.ipynb](https://matplotlib.org/_downloads/toolmanager_sgskip.ipynb)
|
||||
Reference in New Issue
Block a user