如何为克拉尼(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,提问作者木村 健人
相关产品推荐
相关产品推荐

