为非对称数据的tricontourf图设置对称色条范围
问题描述
我需要为大型二维数据集绘制tricontourf图,已编写如下代码:
import matplotlib.pyplot as plt import numpy as np # Load the 3D data file data = np.genfromtxt("data.txt", skip_header=14, delimiter=" ", dtype = float) reflect = data[:,0] emiss = data[:,1] tempdiff = data[:,4] fig, ax = plt.subplots() cb = ax.tricontourf(reflect, emiss, tempdiff, 200, vmin = -800, vmax = 800, cmap = "seismic") cbar = plt.colorbar(cb) cbar.set_label(r'z', rotation = 270, labelpad = 13) ax.set_xlabel('x') ax.set_ylabel('y') ax.set_xlim([0.6,1]) ax.set_ylim([0,0.4]) plt.savefig('plot.pdf', bbox_inches='tight', format='pdf') plt.savefig('plot.png', dpi=300, bbox_inches='tight', format='png') plt.show()
生成的图像中z值存在较大负长尾,我希望使用发散色图(seismic),使色图中的白色线条对应z=0。请问能否设置-800到800的对称色条,同时消除当前图像中的长尾?我已尝试在tricontourf中使用vmin和vmax参数,但仅缩放了色图范围,未改变色条。
解决方案
要实现对称色条且消除长尾,需要同时截断超出范围的数据,并让色图中心严格对齐z=0,具体操作如下:
- 用
np.clip()截断tempdiff中超出[-800,800]的数值,直接消除长尾数据的影响; - 使用
CenteredNorm归一化方法,确保色图的中心对应z=0,同时色条范围严格对称于0。
修改后的代码如下:
import matplotlib.pyplot as plt import numpy as np # Load the 3D data file data = np.genfromtxt("data.txt", skip_header=14, delimiter=" ", dtype=float) reflect = data[:,0] emiss = data[:,1] tempdiff = data[:,4] # 截断超出[-800, 800]的数据,消除长尾 tempdiff_clipped = np.clip(tempdiff, -800, 800) fig, ax = plt.subplots() # 使用CenteredNorm确保色图中心为0,范围对称 norm = plt.CenteredNorm(vcenter=0, halfrange=800) cb = ax.tricontourf(reflect, emiss, tempdiff_clipped, 200, cmap="seismic", norm=norm) cbar = plt.colorbar(cb) cbar.set_label(r'z', rotation=270, labelpad=13) ax.set_xlabel('x') ax.set_ylabel('y') ax.set_xlim([0.6,1]) ax.set_ylim([0,0.4]) plt.savefig('plot.pdf', bbox_inches='tight', format='pdf') plt.savefig('plot.png', dpi=300, bbox_inches='tight', format='png') plt.show()
关键说明
np.clip(tempdiff, -800, 800):将所有小于-800的数值设为-800,大于800的设为800,彻底截断长尾数据,避免其影响色图显示。CenteredNorm(vcenter=0, halfrange=800):这个归一化方法会把vcenter - halfrange(即-800)映射到色图的最小值,vcenter + halfrange(即800)映射到最大值,确保z=0正好对应seismic色图的白色中心,同时色条范围完全对称。
内容的提问来源于stack exchange,提问作者colorofeternity22
相关产品推荐
相关产品推荐

