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

为含陡峭梯度区域的平坦函数(欧拉伽马函数)选择合适色阶

优化复平面欧拉伽马函数实部可视化的方案

针对实轴处函数发散导致色阶压缩、条纹细节丢失的问题,这里提供几个实用的优化方向:

1. 对称对数归一化压缩动态范围

对数变换能有效压制极值对色阶的主导,对称对数还能保留正负值的区分,完美适配伽马函数实部的分布特性:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import SymLogNorm
from scipy.special import gamma

# 提升网格分辨率,保留更多细节
x = np.linspace(-5, 5, 500)
y = np.linspace(-5, 5, 500)
xx, yy = np.meshgrid(x, y)
Z = np.real(gamma(xx + 1j*yy))

# 对称对数归一化:linthresh控制线性/对数区域的分界
norm = SymLogNorm(linthresh=0.1, vmin=-10, vmax=10)

fig, ax = plt.subplots(figsize=(8,8))
# 用pcolormesh替代imshow,更适配连续网格的色彩过渡
im = ax.pcolormesh(xx, yy, Z, norm=norm, cmap="hsv", shading='gouraud')

# 添加密集正负等值线,强化条纹细节
ax.contour(xx, yy, Z, levels=np.arange(-3, 3.1, 0.5), colors='k', linewidths=0.5)

ax.set_aspect('equal')
ax.set_axis_off()
plt.colorbar(im, label='Re[Γ(z)]')
plt.show()

2. 自定义双曲正切归一化

用tanh函数非线性压缩极值范围,同时最大化保留中间值的色彩区分度:

from matplotlib.colors import Normalize

class TanhNorm(Normalize):
    def __init__(self, vmin=None, vmax=None, clip=False, scale=1.0):
        self.scale = scale
        super().__init__(vmin, vmax, clip)
    
    def __call__(self, value, clip=None):
        x = np.ma.masked_array(value)
        x = (x - self.vmin) / (self.vmax - self.vmin)  # 归一化到[0,1]
        x = 2*x - 1  # 映射到[-1,1]
        return 0.5 * (np.tanh(self.scale * x) + 1)  # 压缩回[0,1]

# scale参数控制压缩强度,越小保留的极值细节越多
norm = TanhNorm(vmin=-5, vmax=5, scale=0.5)

fig, ax = plt.subplots(figsize=(8,8))
im = ax.pcolormesh(xx, yy, Z, norm=norm, cmap="hsv", shading='gouraud')
ax.contour(xx, yy, Z, levels=np.arange(-2, 2.1, 0.4), colors='k', linewidths=0.5)

ax.set_aspect('equal')
ax.set_axis_off()
plt.colorbar(im, label='Re[Γ(z)]')
plt.show()

3. 透明度与色阶协同优化

针对极值区域设置精细化的透明度规则,配合对数色阶平衡细节展示与整体观感:

abs_Z = np.abs(Z)
# 大值区域降低透明度,避免掩盖小值细节;小值区域保持完全不透明
alphas = np.where(abs_Z > 0.5, 1 - np.tanh(abs_Z/2), 1)
# 结合对称对数归一化
norm = SymLogNorm(linthresh=0.1, vmin=-10, vmax=10)

fig, ax = plt.subplots(figsize=(8,8))
im = ax.pcolormesh(xx, yy, Z, norm=norm, cmap="hsv", alpha=alphas, shading='gouraud')
ax.contour(xx, yy, Z, levels=np.arange(-3, 3.1, 0.5), colors='k', linewidths=0.5)

ax.set_aspect('equal')
ax.set_axis_off()
plt.colorbar(im, label='Re[Γ(z)]')
plt.show()

核心优化要点

  • 提升分辨率:将网格点数从250提升至500,可完整保留实轴延伸出的细条纹细节
  • pcolormesh替代imshow:更适配连续网格的色彩渲染,避免像素偏移导致的细节模糊
  • 等高线补充:密集的正负等值线能强化条纹的边界感,让细节更突出
  • 动态范围压缩:通过对数或非线性变换,避免极值吞噬小值的色彩表现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 01:45:23