You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib等高线图绘制异常:如何生成圆形等高线且系数最大值为1?

问题描述

我有一个描述距离与某系数关系的函数,绘制一维曲线时一切正常,系数最大值为1,代码如下:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib

matplotlib.rcParams.update({'font.size': 12})

x = np.linspace(0, 8, 800)

f1 = 3 * (x/8)**4 - 8 * (x/8)**3 + 6 * (x/8)**2

plt.plot(x, f1, ':b', label='1st component')

plt.xlabel(r'$x$', fontsize=16)
plt.ylabel(r'$f(x)$', fontsize=16)

plt.xlim([0, 8])
plt.ylim([0, 1.1])

plt.legend(fontsize=14)

plt.tight_layout()
plt.show()

现在需要将该函数应用到所有方位角的曲面,希望用contour绘制等高线。由于该系数不随方位角变化,预期得到圆形等高线,且系数最大值为1,但实际得到异常图形,系数最大值为1.44,代码如下:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib

xx = np.linspace(-8, 8, 100)
yy = np.linspace(-8, 8, 100)
X, Y = np.meshgrid(xx, yy)
        
ZX = 3 * (abs(X)/8)**4 - 8 * (abs(X)/8)**3 + 6 * (abs(X)/8)**2
ZY = 3 * (abs(Y)/8)**4 - 8 * (abs(Y)/8)**3 + 6 * (abs(Y)/8)**2
Z = np.sqrt(np.square(ZX) + np.square(ZY))

cs = plt.contour(X, Y, Z, 20, cmap='rainbow')
plt.clabel(cs)
plt.colorbar()
plt.grid(which='major')
plt.title('Contours Plot')
plt.xlabel('X (m)')
plt.ylabel('Y (k)')

plt.tight_layout()
plt.show()
解决方案

错误根源在于对二维场景的函数逻辑理解偏差:原一维函数描述的是点到原点的径向距离与系数的关系,而非分别对X、Y轴分量计算再做矢量合成。

正确做法是先计算每个点到原点的径向距离r,再将r代入原一维函数得到Z值,这样就能保证等高线为圆形,且系数最大值为1。

修正后的代码如下:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib

matplotlib.rcParams.update({'font.size': 12})

xx = np.linspace(-8, 8, 100)
yy = np.linspace(-8, 8, 100)
X, Y = np.meshgrid(xx, yy)

# 计算每个点到原点的径向距离
r = np.sqrt(np.square(X) + np.square(Y))
# 对径向距离应用原一维函数
Z = 3 * (r/8)**4 - 8 * (r/8)**3 + 6 * (r/8)**2
# 对r>8的点,原函数会输出负值,这里将其设为0(可根据需求调整)
Z[r > 8] = 0

cs = plt.contour(X, Y, Z, 20, cmap='rainbow')
plt.clabel(cs)
plt.colorbar()
plt.grid(which='major')
plt.title('Contours Plot')
plt.xlabel('X (m)')
plt.ylabel('Y (m)')  # 修正原代码中Y轴单位的错误

plt.xlim([-8, 8])
plt.ylim([-8, 8])

plt.tight_layout()
plt.show()

关键说明

  • 基于径向距离计算Z值,保证系数仅与距离相关、与方位角无关,等高线自然为圆形。
  • 原一维函数在x=0处取最大值1,x=8处取0,二维场景下Z值范围与一维完全一致,最大值为1。
  • 针对r>8的点设置Z=0,避免出现无意义的负系数,可根据实际需求调整该处理逻辑。

内容的提问来源于stack exchange,提问作者Vadym Honcharuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:07:31