如何提升Matplotlib绘制的空间比例尺在噪点图像上的可见度?
提升Matplotlib空间比例尺可视化效果的方案
以下是针对噪点图像上空间比例尺可见度差的优化方案,基于你提供的复现代码调整:
1. 给比例尺和文字添加描边
通过给箭头和文字添加白色描边,让它们在复杂噪点背景上更突出:
import numpy as np import matplotlib.pyplot as plt from matplotlib.patheffects import withStroke n=100 a = np.random.normal(0,1,size=(n,n)) fig,ax = plt.subplots(1,1) plt.set_cmap('PuBu') ax.grid(False) ax.imshow(a,vmin=-1,vmax=2) # 给箭头加白色描边 stroke_effect = withStroke(linewidth=4, foreground='white') arrow = ax.arrow(n/3, n/5, n/3, 0, color='black', lw=2.5, head_width=0, head_length=0) arrow.set_path_effects([stroke_effect]) # 给文字加白色描边 text = ax.text(n/2, n/5 - n*0.02, '1 unit', ha='center', color='black', weight='bold') text.set_path_effects([stroke_effect]) plt.show()
2. 给文字添加半透明背景框
用半透明背景隔绝噪点,让文字更清晰:
import numpy as np import matplotlib.pyplot as plt n=100 a = np.random.normal(0,1,size=(n,n)) fig,ax = plt.subplots(1,1) plt.set_cmap('PuBu') ax.grid(False) ax.imshow(a,vmin=-1,vmax=2) # 绘制箭头 ax.arrow(n/3, n/5, n/3, 0, color='black', lw=2.5, head_width=0, head_length=0) # 添加带半透明背景的文字 bbox_props = dict(boxstyle="round,pad=0.3", fc="white", ec="none", alpha=0.8) ax.text(n/2, n/5 - n*0.02, '1 unit', ha='center', color='black', weight='bold', bbox=bbox_props) plt.show()
3. 改用带刻度的比例尺样式
替换单纯箭头,制作带两端刻度的比例尺,视觉辨识度更强:
import numpy as np import matplotlib.pyplot as plt n=100 a = np.random.normal(0,1,size=(n,n)) fig,ax = plt.subplots(1,1) plt.set_cmap('PuBu') ax.grid(False) ax.imshow(a,vmin=-1,vmax=2) # 定义比例尺位置和长度 scale_x_start = n*0.1 scale_x_end = n*0.4 scale_y = n*0.1 # 绘制主刻度线 ax.plot([scale_x_start, scale_x_end], [scale_y, scale_y], color='black', lw=3) # 绘制两端短竖线 ax.plot([scale_x_start, scale_x_start], [scale_y - n*0.015, scale_y + n*0.015], color='black', lw=3) ax.plot([scale_x_end, scale_x_end], [scale_y - n*0.015, scale_y + n*0.015], color='black', lw=3) # 添加带半透明背景的文字 ax.text((scale_x_start+scale_x_end)/2, scale_y - n*0.03, '1 unit', ha='center', color='black', weight='bold', bbox=dict(fc='white', ec='none', alpha=0.8)) plt.show()
4. 将比例尺移到图像边缘空白区
调整坐标轴范围,把比例尺放在图像外的空白区域,完全避开噪点:
import numpy as np import matplotlib.pyplot as plt n=100 a = np.random.normal(0,1,size=(n,n)) fig,ax = plt.subplots(1,1) plt.set_cmap('PuBu') ax.grid(False) # 绘制图像,保留底部空白 im = ax.imshow(a,vmin=-1,vmax=2, extent=[0, n, 0, n]) # 把比例尺放在底部空白区 ax.arrow(n*0.2, -5, n*0.3, 0, color='black', lw=2.5, head_width=0, head_length=0) ax.text(n*0.35, -7, '1 unit', ha='center', color='black', weight='bold') # 调整y轴范围显示比例尺 ax.set_ylim(-10, n) # 添加颜色条 plt.colorbar(im) plt.show()
内容的提问来源于stack exchange,提问作者eneguev
相关产品推荐
相关产品推荐

