用python编写程序,绘制一个周期的正弦曲线,并实现下面的功能:1)鼠标进行图形区域之后,设置图形背景色为黄色,鼠标离开图形区域时将其恢复为白色;2)当鼠标移动至正弦曲线附近(距离小于2个像素)时在鼠标上方出现文本标注当前值,鼠标远离曲线时文本标注自动消失。
时间: 2024-02-26 17:56:37 浏览: 47
好的,以下是实现这个功能的Python代码:
```python
import matplotlib.pyplot as plt
import numpy as np
# 定义正弦函数
def sin_function(x):
return np.sin(x)
# 生成 x 和 y 值
x = np.arange(0, 2 * np.pi, 0.01)
y = sin_function(x)
# 绘制正弦曲线
fig, ax = plt.subplots()
line, = ax.plot(x, y)
# 设置图形背景色为白色
fig.patch.set_facecolor('white')
# 定义鼠标移动事件处理函数
def on_move(event):
# 如果鼠标在图形区域内
if event.inaxes == ax:
# 设置背景色为黄色
fig.patch.set_facecolor('yellow')
# 获取鼠标的坐标
x, y = event.xdata, event.ydata
# 如果距离正弦曲线小于2个像素
if abs(y - sin_function(x)) < 2:
# 在鼠标上方出现文本标注当前值
ax.text(x, y+0.5, f'{sin_function(x):.2f}', ha='center')
else:
# 鼠标远离曲线时文本标注自动消失
ax.texts = []
else:
# 鼠标离开图形区域时将其恢复为白色
fig.patch.set_facecolor('white')
ax.texts = []
# 绑定鼠标移动事件处理函数
fig.canvas.mpl_connect('motion_notify_event', on_move)
# 显示图形
plt.show()
```
以上代码使用 `matplotlib` 库绘制了一个周期的正弦曲线,并实现了以下两个功能:
1. 当鼠标进入图形区域时,将图形背景色设置为黄色,当鼠标离开图形区域时将其恢复为白色。
2. 当鼠标移动至正弦曲线附近(距离小于2个像素)时在鼠标上方出现文本标注当前值,鼠标远离曲线时文本标注自动消失。
注意:代码中的 `sin_function` 函数定义了一个正弦函数,用于生成正弦曲线的 y 值。函数中的 `np.sin` 函数是 `numpy` 库中的正弦函数。在代码中我们使用了 `numpy` 库中的 `arange` 函数生成了一组 x 值,步长为 0.01,范围为 0 到 2π。`fig, ax = plt.subplots()` 用于创建一个新的图形并返回一个 `Figure` 和一个 `Axes` 对象。`ax.plot(x, y)` 用于绘制正弦曲线,返回一个 `Line2D` 对象。`fig.patch` 是 `Figure` 对象的属性,用于设置图形的背景色。`ax.text()` 用于在指定的坐标位置添加文本标注,`ax.texts` 是 `Axes` 对象的属性,是一个文本标注列表,用于在需要时清除文本标注。`fig.canvas.mpl_connect()` 用于绑定鼠标移动事件处理函数。