如何在Python Matplotlib中隐藏填充圆形区域内的底层虚线?
问题原因
matplotlib中不同绘图元素有默认的层级(zorder)优先级:plt.plot()绘制的线条默认zorder值为2,PatchCollection生成的图形集合默认zorder值为1,线条层级更高就会显示在圆形上方,出现圆形透出虚线的视觉效果。另外原代码缺少matplotlib模块的直接导入语句,运行时会触发名称错误。
修复方案
有两种可选修改方式,任选其一即可实现圆形遮挡虚线的效果:
- 上调圆形集合的层级:创建
PatchCollection时新增zorder=3参数,将圆形层级调整到线条上方,默认填充透明度为1无需额外设置 - 下调虚线的层级:绘制两条虚线时添加
zorder=1参数,让线条层级低于圆形
核心修改代码(方案1):
# 原代码行 coll = matplotlib.collections.PatchCollection(patches,facecolors='red') # 修改为 coll = matplotlib.collections.PatchCollection(patches, facecolors='red', zorder=3)
完整可运行代码
import numpy as np import matplotlib import matplotlib.pyplot as plt fig = plt.figure(figsize=(12, 12)) matplotlib.rcParams.update({'font.size': 10, 'font.family': 'serif'}) axes = fig.add_subplot(1 ,1 ,1, aspect=1) axes.set_xlabel("X Position (m)") axes.set_ylabel("Y Position (m)") plt.plot([1900e-6,1900e-6], [0,3060e-6], '--',color='black') plt.plot([2000e-6,2000e-6], [0,3060e-6], '--',color='black') plt.xlim(0,4060e-6) plt.ylim(0,3060e-6) Xcor=np.array([2000e-6,2000e-6]) Ycor=np.array([1000e-6,2500e-6]) Rcor=np.array([547e-6, 447e-6]) C=np.vstack((Xcor,Ycor)) C=np.transpose(C) patches = [plt.Circle(center, size) for center, size in zip(C, Rcor)] # 新增zorder参数调整圆形层级 coll = matplotlib.collections.PatchCollection(patches,facecolors='red', zorder=3) axes.add_collection(coll) plt.show()
内容的提问来源于stack exchange,提问作者SIMRANDEEP BAHAL
相关产品推荐
相关产品推荐

