使用matplotlib绘制矢量场时出现黑色矩形块是什么原因?
故障原因
黑色矩形块是矢量箭头密度过高、完全重叠导致的:
- 你的代码在[-5,5]的单轴区间内生成了1000个采样点,经
torch.meshgrid处理后,整个绘图区域共生成1000*1000=100万个待绘制的矢量箭头 matplotlib的quiver绘制的每个箭头都包含箭杆、箭头翼的黑色填充图形,当采样点间距小于箭头本身的尺寸时,相邻箭头会完全重叠覆盖,所有黑色填充拼接在一起就形成了无空隙的纯黑色矩形块,完全无法分辨单个箭头形态。
额外注意:你使用plt.axes([0,0,1,1])将绘图轴铺满了整个画布,会导致刻度、坐标轴标签被裁切到画布外,该问题不会导致黑块,但会影响正常显示效果。
修复方法
- 降低采样密度:单轴采样点数量设置为20-30个即可清晰展示均匀矢量场的效果,无需设置1000个过高的采样值
- 若有高密度采样需求,可在调用
quiver时传入scale参数调大箭头的缩放系数、传入width参数调细箭杆宽度,避免箭头互相挤压重叠 - 建议给
torch.meshgrid传入indexing='xy'参数,匹配matplotlib的坐标顺序,避免网格方向异常;同时调整axes的边距参数,给刻度、标签留出显示空间
修复后的可运行参考代码:
import torch import matplotlib.pyplot as plt # 调低单轴采样点数 x_axis = torch.linspace(-5, 5, 25) y_axis = torch.linspace(-5, 5, 25) # 补充坐标索引参数,匹配matplotlib坐标系 x_grid, y_grid = torch.meshgrid(x_axis, y_axis, indexing='xy') # 调整axes边距,避免内容裁切 ax = plt.axes([0.1, 0.1, 0.8, 0.8]) # 配置箭头缩放比例、箭杆宽度,避免重叠 ax.quiver(x_grid, y_grid, 1, -1, scale=30, width=0.005) plt.show()
内容的提问来源于stack exchange,提问作者Yedidya kfir
相关产品推荐
相关产品推荐

