gpt4 book ai didi

python - 如何在 python `matplotlib` 中向等高线图添加线条?

转载 作者:太空狗 更新时间:2023-10-30 01:20:26 26 4
gpt4 key购买 nike

我有以下功能来说明一些等高线:

"""
Illustrate simple contour plotting, contours on an image with
a colorbar for the contours, and labelled contours.

See also contour_image.py.
"""
import matplotlib
import numpy as np
import matplotlib.cm as cm
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt

matplotlib.rcParams['xtick.direction'] = 'out'
matplotlib.rcParams['ytick.direction'] = 'out'

X = np.arange(-1.2, 1.2, 0.005)
Y = np.arange(-1.2, 1.2, 0.005)
X, Y = np.meshgrid(X, Y)
Z = (np.ones([np.shape(X)[0],np.shape(X)[1]])-X)**2+100*(Y-(X)**2)**2


# Create a simple contour plot with labels using default colors. The
# inline argument to clabel will control whether the labels are draw
# over the line segments of the contour, removing the lines beneath
# the label
levels = np.arange(-100.0, 600, 1.0)
plt.figure()
CS = plt.contour(X,
Y,
Z,
levels=levels,
)
plt.clabel(CS,
np.array(filter(lambda lev: lev <5.0, levels)),
inline=0.5,
fontsize=10,
fmt='%1.1f'
)

plt.hold(True)


plt.plot(np.arange(-1.0, 1.0, 0.005),
np.arange(-1.0, 1.0, 0.005),
np.ones(len(np.arange(-1.0, 1.0, 0.005)))*100, '-k')

plt.title('Contour Lines and Constraint of Rosenbrock Optimiztion Problem')
plt.show()

enter image description here

如果您注释掉线条,等高线图看起来很棒......:

# plt.hold(True)


# plt.plot(np.arange(-1.0, 1.0, 0.005),
# np.arange(-1.0, 1.0, 0.005),
# np.ones(len(np.arange(-1.0, 1.0, 0.005)))*100, '-k')

enter image description here

...但我无法像我需要的那样让线条显示在情节上。我只需要将它们覆盖在等高线图的顶部。做这个的最好方式是什么?

我知道是 possible in R ,但是如何使用 matplotlibPython 中执行此操作?

最佳答案

plt.plot 根据一系列 x 和 y 坐标绘制二维线。每个点都没有关联的 z 坐标,因此无需传入第三个数组参数。目前 plt.plot 正在将这些数组解释为两条单独的线的坐标,并且相当于:

plt.plot(np.arange(-1.0, 1.0, 0.005), np.arange(-1.0, 1.0, 0.005))
plt.plot(np.ones(len(np.arange(-1.0, 1.0, 0.005)))*100, '-k')

由于第二行包含最多 100 的 x 和 y 坐标,轴将自动重新缩放,因此等高线图不再清晰可见。

我认为您可能正在考虑 zorder= 参数(它应该只是一个标量而不是数组)。在这种情况下没有必要 - 因为您是在等高线之后绘制线条,所以默认情况下它的 zorder 应该比等高线更高。您可以去掉 plt.plot

的第三个数组参数

此外,由于您绘制的直线只有两个点,因此您只需传递起点和终点坐标:

plt.plot([-1, 1], [-1, 1], '-k')

enter image description here

关于python - 如何在 python `matplotlib` 中向等高线图添加线条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39710994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com