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

如何为克拉尼(Chladni)图添加渐变色彩效果?

如何为克拉尼(Chladni)图添加渐变色彩效果?

嗨,我看到你在绘制克拉尼图时遇到了色彩不够平滑渐变的问题,咱们来快速搞定它!

你当前用的contourf默认会把数据分成少量的等高线区间来填充颜色,所以看起来是块状而非平滑渐变。想要实现理想的渐变效果,有两种简单的方法:

方法一:使用pcolormesh(推荐,天然平滑)

pcolormesh会直接根据每个网格点的Z值进行像素级的色彩映射,天生就能带来平滑的渐变效果。修改你的代码如下:

import numpy as np
import matplotlib.pyplot as plt

def f(x, y):
    return -2*np.cos(8*np.pi*x/0.8)*np.cos(2*np.pi*(y+0.4)/0.8) -2*np.cos(6*np.pi*x/0.8)*np.cos(4*np.pi*(y+0.4)/0.8)

x = np.linspace(0, 0.8, 100)
y = np.linspace(-0.4, 0.4, 100)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)

fig, ax = plt.subplots(1,1)
# 替换contourf为pcolormesh,自动实现平滑渐变
cp = ax.pcolormesh(X, Y, Z, cmap='jet')
# 如果需要颜色条可以加上这行:plt.colorbar(cp)
ax.set_box_aspect(1)
plt.axis('off')
plt.show()

方法二:增加contourf的层级数量

如果你还是想用contourf,只需要手动设置足够多的色彩层级,让区间划分足够细密,就能模拟出平滑渐变的效果:

import numpy as np
import matplotlib.pyplot as plt

def f(x, y):
    return -2*np.cos(8*np.pi*x/0.8)*np.cos(2*np.pi*(y+0.4)/0.8) -2*np.cos(6*np.pi*x/0.8)*np.cos(4*np.pi*(y+0.4)/0.8)

x = np.linspace(0, 0.8, 100)
y = np.linspace(-0.4, 0.4, 100)
X, Y = np.meshgrid(x, y)
Z = f(X, Y)

fig, ax = plt.subplots(1,1)
# 生成200个层级,覆盖Z的最小值到最大值,让色彩过渡更平滑
levels = np.linspace(Z.min(), Z.max(), 200)
cp = ax.contourf(X, Y, Z, levels=levels, cmap='jet')
# 可选:添加颜色条
# plt.colorbar(cp)
ax.set_box_aspect(1)
plt.axis('off')
plt.show()

两种方法都能帮你得到平滑的渐变色彩,你可以根据自己的习惯选择~

备注:内容来源于stack exchange,提问作者木村 健人

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 13:39:28