import matplotlib.pyplot as plt import numpy as np fig, ax = plt.subplots() x = np.linspace(0, 2*np.pi, 100) y = np.sin(x) line, = ax.plot(x, y) ax.set_facecolor('white') def on_enter(event): ax.set_facecolor('yellow') fig.canvas.draw() def on_leave(event): ax.set_facecolor('white') fig.canvas.draw() def on_move(event): if event.inaxes == ax: x, y = event.xdata, event.ydata index = np.searchsorted(x, x) if abs(y - line.get_ydata()[index]) < 0.2: ax.text(x, y, f'{y:.2f}', ha='center', va='bottom', fontsize=14) else: ax.texts.clear() fig.canvas.draw() fig.canvas.mpl_connect('axes_enter_event', on_enter) fig.canvas.mpl_connect('axes_leave_event', on_leave) fig.canvas.mpl_connect('motion_notify_event', on_move) plt.show()
时间: 2024-04-28 21:25:27 浏览: 153
这是一个使用 Matplotlib 绘制正弦曲线,并在鼠标移动到曲线上时显示对应的 y 值的交互式图表。其中:
- `fig, ax = plt.subplots()` 创建一个包含单个坐标轴的图表对象。
- `x = np.linspace(0, 2*np.pi, 100)` 生成一个包含 100 个等间距点的数组。
- `y = np.sin(x)` 用正弦函数计算每个点的 y 值。
- `line, = ax.plot(x, y)` 在坐标轴上绘制出曲线,并将返回的线条对象赋值给 `line`。
- `ax.set_facecolor('white')` 设置坐标轴的背景颜色为白色。
- `on_enter`、`on_leave`、`on_move` 是三个回调函数,用于处理鼠标进入、离开和移动事件。
- `fig.canvas.mpl_connect` 将回调函数与图表对象的事件连接起来,实现交互式功能。
- `plt.show()` 显示图表。
当鼠标移动到曲线上时,如果鼠标所在位置距离曲线上某个点的 y 值小于 0.2,则在该点处显示对应的 y 值。否则清除之前的文本。同时,当鼠标进入坐标轴时,将坐标轴的背景颜色改为黄色,鼠标离开时恢复为白色。
相关问题
使用matplotlib优化下面的代码,保证函数所占面积的颜色为紫色。import numpy as np import matplotlib.pyplot as plt n = 256 X = np.linspace(-np.pi, np.pi, n) Y = np.sin(2 * X) # YOUR CODE HERE plt.show()
以下是优化后的代码,使用了`fill_between`函数来绘制紫色的面积:
```python
import numpy as np
import matplotlib.pyplot as plt
n = 256
X = np.linspace(-np.pi, np.pi, n)
Y = np.sin(2 * X)
fig, ax = plt.subplots()
ax.plot(X, Y, color='blue')
ax.fill_between(X, 0, Y, where=(Y > 0), color='purple')
ax.fill_between(X, 0, Y, where=(Y < 0), color='purple')
plt.show()
```
结果如下图所示:
![image.png](attachment:image.png)
%matplotlib inline import matplotlib import matplotlib.pyplot as plt ,第一行何意
### %matplotlib inline 的作用
`%matplotlib inline` 是 IPython 和 Jupyter Notebook 中的一个魔法命令,用于配置 Matplotlib 图形的显示方式。该命令使得绘制的图形可以直接嵌入到笔记本单元格的输出区域中,而无需调用 `plt.show()` 函数[^2]。
当执行 `%matplotlib inline` 后,在后续的代码单元格中创建的所有图表都会以内联形式展示出来,并且这些图表是非交互式的静态图像[^3]。
#### 使用示例
下面是一个简单的例子来说明如何使用 `%matplotlib inline`:
```python
# 首先导入必要的库并设置内联绘图模式
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
# 创建一些数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 绘制图形
fig, ax = plt.subplots()
ax.plot(x, y);
```
这段代码将会在同一页面上直接显示出正弦波曲线,不需要额外的操作就能看到结果[^1]。
阅读全文