plt.subplots怎么画基准线
时间: 2023-11-06 16:01:22 浏览: 170
plt.subplots函数是用来创建一个包含多个子图的图像,并且返回一个包含子图对象的元组。要画基准线,你可以使用子图对象的axhline或axvline方法。
如果你想画一条水平的基准线,你可以使用axhline方法。例如,如果你想在y轴上的数值为0的位置画一条基准线,你可以使用以下代码:
ax.axhline(y=0, color='red', linestyle='--')
如果你想画一条垂直的基准线,你可以使用axvline方法。例如,如果你想在x轴上的数值为1的位置画一条基准线,你可以使用以下代码:
ax.axvline(x=1, color='blue', linestyle='--')
请注意,这里的ax是子图对象的名称。你需要根据你创建的子图对象的名称进行调用。
相关问题
fig, ax = plt.subplots() bins = np.arange(-3, 8) ax.plot(x, np.full_like(x, -0.1), '|k', markeredgewidth=1) for count, edge in zip(*np.histogram(x, bins)): for i in range(count): ax.add_patch(plt.Rectangle((edge, i), 1, 1, alpha=0.5)) ax.set_xlim(-4, 8) ax.set_ylim(-0.2, 8)
这段代码使用了 Matplotlib 库来绘制一个直方图。首先,使用 `plt.subplots()` 函数创建一个包含单个子图的图形窗口,并将返回的 `Figure` 和 `Axes` 对象分别赋值给 `fig` 和 `ax` 变量。然后,使用 `np.arange()` 函数定义了一个从 -3 到 7 的间隔为 1 的数组,作为直方图的边界。接着,使用 `ax.plot()` 函数绘制了一条水平直线,作为直方图的基准线。然后,使用 `np.histogram()` 函数计算了每个区间内数据点的数量,并使用 `zip()` 函数将每个区间的数量和边界值打包成一个元组。接着,使用两个嵌套的 `for` 循环来为每个数据点绘制一个矩形,其中外部循环遍历每个区间,内部循环遍历该区间内的数据点。最后,使用 `ax.set_xlim()` 和 `ax.set_ylim()` 函数设置了 x 轴和 y 轴的范围。
优化这段代码,保证label两个在右上角,两个在右下角,代码如下;import numpy as np import matplotlib.pyplot as plt x = np.linspace(0, 10, 1000) lines = [np.sin(x), np.cos(x), -np.cos(x), -np.sin(x)] line_styles = ['-', '-.', '--', ':'] line_colors = ['red', 'blue', 'green', 'black'] fig, ax = plt.subplots() for i in range(4): ax.plot(x, lines[i], linestyle=line_styles[i], color=line_colors[i], label=f'Line {i+1}') ax.legend(loc='upper right') ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_title('Trig Functions') plt.show()
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 1000)
lines = [np.sin(x), np.cos(x), -np.cos(x), -np.sin(x)]
line_styles = ['-', '-.', '--', ':']
line_colors = ['red', 'blue', 'green', 'black']
fig, ax = plt.subplots()
for i in range(4):
if i < 2:
ax.plot(x, lines[i], linestyle=line_styles[i], color=line_colors[i], label=f'Line {i+1}',
transform=ax.transAxes, clip_on=False)
else:
ax.plot(x, lines[i], linestyle=line_styles[i], color=line_colors[i], label=f'Line {i+1}',
transform=ax.transAxes, clip_on=False)
ax.legend(loc='upper right')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_title('Trig Functions')
ax.set_ylim([-1.2,1.2])
plt.show()
优化思路:使用 transform 和 clip_on 属性来控制 label 的位置。对于前两个线条,transform 设置为 ax.transAxes(以轴坐标为基准),clip_on 设置为 False(不显示在图外),对于后两个线条同理。同时设置 y 轴范围为 [-1.2,1.2],以确保四个 label 都在图内。
阅读全文