matplotlib Twiny()轴未与下轴对齐

lpwwtiir  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(68)

我希望你能帮我解决这个小问题。
我绘制了三组误差条数组,我想在图的顶部有第二组刻度,所以我创建了一个新的双轴,给予它同样的刻度坐标,x

。代码的一部分应该做这件事,如下所示。

x = np.arange(len(Stars))*2
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twiny()

ax1.errorbar(x-.5,[Jmin_IS[i] for i in Ind],yerr=[[J1sL_IS[i] for i in Ind],[J1sR_IS[i] for i in Ind]],fmt='o',ms=6)
ax1.errorbar(x   ,[Jmin_OM[i] for i in Ind],yerr=[[J1sL_OM[i] for i in Ind],[J1sR_OM[i] for i in Ind]],fmt='s',ms=6)
ax1.errorbar(x+.5,[Jmin_CA[i] for i in Ind],yerr=[[J1sL_CA[i] for i in Ind],[J1sR_CA[i] for i in Ind]],fmt='^',ms=6)
for xv in np.arange(len(Stars))*4: ax1.axvspan(xv-1, xv+1, color='grey',alpha=.5)
x2labels = [str(r'N$_{\star}$=%i'%Stars[i]) for i in Ind]
ax1.set_xticks(x)
ax2.set_xticks(x)
ax2.set_xticklabels(x2labels, rotation=90)    
ax1.set_ylim(15,21)
ax1.set_xlim(-1,39)
plt.tight_layout()
plt.grid(ls='dotted',axis='y')
plt.show()

字符串
结果如图所示
有两个问题:首先,双轴ax2记号被移位(N_星星数字相对于底部x轴的记号未对齐),并且在y方向上不显示栅格。
有人能发现一个错误吗?这是Python包版本的问题吗?非常感谢

unhi4e5o

unhi4e5o1#

顶部y轴和底部y轴的刻度不对齐的问题,是因为你改变了第一个轴的x数据限制。换句话说,你改变了一个轴的“x缩放”,但没有改变另一个轴的“x缩放”,这会导致刻度不对齐。如果你还写

ax2.set_xlim(-1,39)

字符串
这个问题就会解决
至于没有出现y网格线,可以用第一轴的grid方法解决:

ax1.grid(ls='dotted',axis='y')


当你调用plt.grid(或任何其他来自pyplot的方法)时,它将在最后一个活动轴上运行,在本例中是ax2。我不确定为什么ax2.grid(axis='y')不显示网格线,但它是一个简单的解决方案,只需在作为其他轴基础的轴上使用该方法。

相关问题