如何在Python中绘制以f(c)、g(c)为坐标轴、c值为等高线的等高线图
实现方案
核心思路是先完成参数采样、坐标映射两步,再用matplotlib的等高线绘制接口输出即可,以下是可直接运行的示例:
- 依赖库:numpy、matplotlib
- 你可以直接替换示例中的
f(c)、g(c)函数,以及等高线对应的c取值规则适配你的需求
完整示例代码
import numpy as np import matplotlib.pyplot as plt # 自定义坐标轴x对应的f(c)函数,示例中c为二维参数[c1, c2],可根据你的需求调整c的维度 def f(c): return c[0] + 0.5 * np.sin(c[1]) # 自定义坐标轴y对应的g(c)函数 def g(c): return c[1] + 0.5 * np.cos(c[0]) # 1. 生成参数c的采样网格,示例中c的两个维度取值范围均为-2π到2π c1_sample = np.linspace(-2 * np.pi, 2 * np.pi, 100) c2_sample = np.linspace(-2 * np.pi, 2 * np.pi, 100) c1, c2 = np.meshgrid(c1_sample, c2_sample) c = np.array([c1, c2]) # 2. 计算两个坐标轴的映射值 x = f(c) y = g(c) # 3. 绘制等高线,示例中等高线取值对应c的第一个维度c1,可替换为你需要的c取值规则 contour = plt.contour(x, y, c1, levels=20, cmap='viridis') # 添加等高线数值标签 plt.clabel(contour, inline=True, fontsize=8) # 添加颜色条标注c的取值 plt.colorbar(contour, label='c value') plt.xlabel('f(c)') plt.ylabel('g(c)') plt.show()
特殊场景适配
- 如果你使用的是非规则网格采样的c值,把所有变量展平后用
tricontour绘制即可:
x_flat = x.flatten() y_flat = y.flatten() c_flat = c1.flatten() contour = plt.tricontour(x_flat, y_flat, c_flat, levels=20, cmap='viridis')
- 如果你的c是一维参数,本质是参数化曲线,直接用
plt.plot(x, y)绘制即可,需要标注c取值可以用散点图上色实现。
内容的提问来源于stack exchange,提问作者sycramore
相关产品推荐
相关产品推荐

