Matplotlib双X轴图表Zorder失效:如何让蓝色点置于灰色点上方?
在Matplotlib双X轴图表中让蓝色点显示在灰色点前方的解决方案
为什么设置zorder没生效?
问题核心在于:ax3是通过ax.twiny()创建的双X轴,Matplotlib中后创建的轴默认会覆盖在原轴上方。哪怕你给ax上的蓝色点设置了更高的zorder,但因为ax3整个轴的层级比ax高,所以ax3上的灰色点还是会挡在蓝色点前面——元素的zorder只在同一个轴内部生效,跨轴的层级由轴本身的zorder决定。
解决方法
调整两个轴的层级,让原轴ax显示在ax3上方,同时把ax3的背景设为透明,避免遮住ax的内容:
修改后的完整代码
import matplotlib.pyplot as plt import numpy as np fig, ax = plt.subplots(figsize=(10, 6)) ax3 = ax.twiny() ax3.errorbar([1, 2, 3, 4], [1, 2, 3, 4], yerr = [1, 2, 3, 4], fmt='o', color='gray', zorder = 1) ax3.plot([-1,4], [1,2], c = 'black', zorder = 2) ax3.tick_params(axis='x') ax3.tick_params(axis='x', colors='gray') ax3.set_xlim(-1,4) # 调整轴的层级,让ax显示在ax3上方 ax.set_zorder(ax3.get_zorder() + 1) # 把ax3的背景设为透明,避免遮挡ax的内容 ax3.patch.set_visible(False) ax.tick_params(axis='x') ax.tick_params(axis='x', colors='mediumblue') ax.grid(color='grey', linestyle='-', linewidth=0.5, zorder = 1) ax.errorbar([1.1, 2.1, 3.1, 4.1, 2.91], [1.1, 2.1, 3.1, 4.1,2], yerr = [1.1, 2.1, 3.1, 4.1,1], fmt='o', color='mediumblue', zorder = 4, capsize=0.1) plt.tight_layout() plt.show()
修改后,蓝色点就会显示在灰色点的前方,同时两个X轴的样式也能正常保留。
内容的提问来源于stack exchange,提问作者Elena Greg
相关产品推荐
相关产品推荐

