Matplotlib绘制8位精度等高线并指定区间着色的实现方法咨询
解决方法
要同时实现高精度等高线绘制和指定区域填充,可按以下步骤修改代码:
- 第一步:自定义等高线层级,避免默认自动生成的层级精度不足。直接在你需要的取值区间
[0.99999999, 1.00000001]内生成指定数量的等间距层级,精度可以严格控制到1e-8级别。 - 第二步:使用
contourf方法完成等高区域填充,可单独指定需要填充的层级范围,只针对目标区间着色。 - 第三步:调整等高线标签的格式化字符串,改为8位小数显示,匹配精度要求。
修改后可直接运行的完整代码如下:
import numpy as np import matplotlib.pyplot as plt # 原始网格生成逻辑 khmax = np.arange(0, np.pi, 0.01) Ncmax = np.arange(0, np.pi, 0.01) X, Y = np.meshgrid(Ncmax, khmax) fig, ax = plt.subplots() # -------------------------- 核心修改部分 -------------------------- # 定义目标取值范围,可根据需求调整 target_min = 0.99999999 target_max = 1.00000001 # 生成30个等间距的等高线层级,精度严格匹配8位小数要求 contour_levels = np.linspace(target_min, target_max, 30) # 先绘制填充等高区域,cmap可自定义配色,alpha调整透明度 contourf = ax.contourf(X, Y, mod_G, levels=contour_levels, cmap='Blues', alpha=0.6) # 绘制高精度等高线,这里设置为黑色细线避免遮挡填充色 contour = ax.contour(X, Y, mod_G, levels=contour_levels, colors='k', linewidths=0.5) # 标签格式改为8位小数,匹配精度需求 ax.clabel(contour, inline=True, inline_spacing=-1, fmt='%1.8f', fontsize=8) # ------------------------------------------------------------------- ax.set_title('magnitude of G') ax.set_xlabel('Ncmax') ax.set_ylabel('khmax') # 可选:添加颜色条显示填充区域对应的数值范围 plt.colorbar(contourf) plt.show()
如果需要仅对特定子区间着色,可直接修改
target_min和target_max为对应区间数值即可。如果需要区分填充区间和全部等高线的显示范围,可以给contour和contourf传入不同的levels参数。
内容的提问来源于stack exchange,提问作者Avii
相关产品推荐
相关产品推荐

