绘制曲线 y=2e-0.5xsin(2x),并建立一个与之相联系的快捷菜单,用以控制曲线的线型和曲线宽度。
时间: 2023-12-03 14:44:26 浏览: 105
以下是 Python 代码实现:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义函数
def f(x):
return 2*np.exp(-0.5*x)*np.sin(2*x)
# 定义 x 范围
x = np.linspace(-np.pi, np.pi, 1000)
# 绘制曲线
plt.plot(x, f(x), linewidth=1)
# 自定义快捷菜单
plt.rcParams['toolbar'] = 'toolmanager'
from matplotlib.backend_tools import ToolToggleBase
class LineWidthTool(ToolToggleBase):
description = 'Line Widths'
image = 'zoom_to_rect.png'
def __init__(self, *args, **kwargs):
self.line_widths = [0.5, 1, 2, 4, 8]
self.labels = [str(i) for i in self.line_widths]
super().__init__(*args, **kwargs)
def enable(self, *args):
super().enable(*args)
self.radio_ax = self.figure.add_axes([0.86, 0.1, 0.12, 0.3],
xticks=[], yticks=[],
frameon=True)
self.radio = plt.matplotlib.widgets.RadioButtons(
self.radio_ax, self.labels, active=1)
self.radio.on_clicked(self.set_width)
self.fig.canvas.draw_idle()
def set_width(self, label):
lw = self.line_widths[self.labels.index(label)]
plt.setp(self.ax.lines, linewidth=lw)
self.fig.canvas.draw_idle()
def disable(self, *args):
super().disable(*args)
self.radio_ax.remove()
self.fig.canvas.draw_idle()
# 添加快捷菜单
plt.rcParams['toolbar.tools'] = [
'pan', 'zoom', 'box_zoom', 'save', LineWidthTool]
# 显示图像
plt.show()
```
运行以上代码,即可得到绘制的曲线,并且该曲线的线型和宽度可以通过自定义的快捷菜单进行控制。
阅读全文