在matplotlib的等高线图中只显示所需的标签

64jmpszr  于 2023-05-18  发布在  其他
关注(0)|答案(2)|浏览(145)
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1,5,20)
y = np.linspace(1,5,20)
[X, Y] = np.meshgrid(x, y)

Z = X**3+Y**3
ax = plt.axes()
contours = plt.contour(X,Y,Z, 3, colors='black')

plt.clabel(contours,fmt = '%2.2f', inline=True)
plt.contourf(X,Y,Z, 100, cmap='plasma',alpha=1.0)

ax.set_xlabel('X')
ax.set_ylabel('Y')

plt.colorbar();
plt.show()

上面的代码给出了Z的等值线图,其中等值线的数量由用户定义。然而,它所取的Z值是通过使用plt.contour函数中的数字自动确定的。在这段代码中,我想要的是Z的值应该是用户定义的(例如Z=70标记的轮廓),并且应该只显示该特定Z的一个轮廓。请帮帮我

cngwdvgl

cngwdvgl1#

您可以将contour_levels数组传递为:

x = np.linspace(1,5,20)
y = np.linspace(1,5,20)
[X, Y] = np.meshgrid(x, y)

Z = X**3+Y**3
ax = plt.axes()
contour_levels = [5, 20, 50, 100, 200, 300]
contours = plt.contour(X,Y,Z, contour_levels, colors='black')

plt.clabel(contours,fmt = '%2.2f', inline=True)
plt.contourf(X,Y,Z, 100, cmap='plasma',alpha=1.0)

ax.set_xlabel('X')
ax.set_ylabel('Y')

plt.colorbar()
plt.show()

myss37ts

myss37ts2#

您可以执行以下操作:

contours = plt.contour(X,Y,Z, levels=[70], colors="black")

您需要传递一个列表,其中仅包含所需的轮廓值。
完整代码:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1, 5, 20)
y = np.linspace(1, 5, 20)
[X, Y] = np.meshgrid(x, y)

Z = X ** 3 + Y ** 3
ax = plt.axes()
contours = plt.contour(X, Y, Z, 3, levels=[70], colors="black") # <---

plt.clabel(contours,fmt = "%2.2f", inline=True)
plt.contourf(X, Y, Z, 100, cmap="plasma", alpha=1.0)

ax.set_xlabel("X")
ax.set_ylabel("Y")

plt.colorbar()
plt.show()

输出:

您也可以使用任意数量的轮廓来执行此操作。
例如

contours = plt.contour(X, Y, Z, 3, levels=[20, 30, 50, 100], colors="black")

相关问题