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

双变量复函数图像的共形颜色映射实现方法咨询

复映射输入输出颜色匹配实现方案

你不需要手动遍历点逐个提取、赋值颜色,直接利用matplotlib的原生颜色映射规则绑定数值与色阶即可,实现难度和运行效率都远优于手动遍历方案。

实现原理

你最初绘制输入平面着色时,本质是将每个输入点到原点的距离fx = sqrt(A²+B²)映射到了色阶上。只要在绘制输出映射像时,让每个输出点的颜色直接绑定对应输入点的fx值,且两张图使用完全一致的色卡、数值映射范围,就能实现颜色的精准对应:输入原点附近(fx≈0)的点映射到输出平面后会显示为深蓝色,fx值越大颜色越偏向亮部,和输入平面的着色规则完全统一。

完整可运行代码

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

# 生成输入复平面网格
a = np.arange(-np.pi, np.pi, 0.1)
b = np.arange(-np.pi, np.pi, 0.1)
A, B = np.meshgrid(a, b)
fx = np.sqrt(A**2 + B**2)  # 颜色映射基准值:输入点到原点的距离

# 绘制着色后的输入Argand平面
plt.figure(figsize=(10,10))
# 显式指定色卡和数值范围,保证和输出图色阶完全匹配
im = plt.pcolormesh(A, B, fx, cmap='jet')
plt.colorbar(im, label='输入点到原点距离')
plt.xlabel('输入实部 Re(z)')
plt.ylabel('输入虚部 Im(z)')
plt.title('着色输入复平面')
plt.show()

# 计算双变量复函数映射结果
y = np.exp(1j*A) - np.exp(-1j*B)
real = y.real
imag = y.imag

# 绘制颜色匹配的输出映射像
plt.figure(figsize=(10,10))
# 先绘制浅灰色连线(可选,还原你原本的连线效果)
plt.plot(real, imag, color='lightgray', linewidth=0.7, zorder=0)
# 散点图直接绑定fx作为颜色值,复用和输入图一致的色卡、数值范围
sc = plt.scatter(real.flatten(), imag.flatten(), 
                 c=fx.flatten(), cmap='jet',
                 vmin=fx.min(), vmax=fx.max(),
                 marker='*', edgecolor='r', s=35, zorder=1)
plt.colorbar(sc, label='对应输入点到原点距离')
plt.xlim(-2.05, 2.05)
plt.ylim(-2.05, 2.05)
plt.xlabel('输出实部 Re(w)')
plt.ylabel('输出虚部 Im(w)')
plt.title('复函数映射像(颜色对应输入位置)')
plt.show()

关键注意事项

  • 不要手动提取pcolormesh渲染后的像素颜色值:这类操作需要额外处理画布渲染、坐标转换、色阶归一化等逻辑,网格点数量大时运行效率极低,出错概率高。直接传入原始的颜色基准值fx,matplotlib会自动完成统一的颜色映射,不需要额外做颜色值转换。
  • 保证颜色一致的核心是两图使用相同的色卡(cmap参数)、相同的数值映射上下限(vmin、vmax参数),避免matplotlib自动缩放色阶导致两边颜色对应关系错位。
  • 如果需要切换着色维度,比如用输入点的辐角代替到原点的距离着色,只需要把fx替换为对应的特征值(例如辐角可写为fx = np.arctan2(B, A)),其余逻辑不需要改动。
  • 代码中选用cmap='jet'是为了匹配你描述的“原点附近显示为深蓝色”的效果,如果需要更换配色,同时修改两处绘图的cmap参数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:39:20