无法获取twiny()以在直方图中正确对齐X轴

时间:2018-10-12 19:00:47

标签: python matplotlib

我正在尝试在图的顶部添加第二个x轴标签。法线轴按对数刻度显示,并按应显示为10 ^ -1、10 ^ 0等,但我也希望沿顶部的每个10 ^ x.5滴答(.1,.32、1、3.2等)。当我尝试用twiny做到这一点时,它们完全不正确地对齐,并且我什至不明白其原因。这是我的代码(以及生成的图):

from pylab import *
import numpy as np

dfile = "data.txt"                       #DATA STUFF YOU DON'T NEED
data = np.loadtxt(dfile,dtype=float)
asep = data[:,1]
par= data[:,2]
dist = 1000/par
dsep = asep*dist
ldsep = np.log10(dsep)


#RELEVANT BITS

ax1=subplot(211)
ax1.set_xlim([0,100])
plt.gca().set_xscale("log")
plt.hist(allsep,bins=[.1,.32,1,3.2,10,32,100],facecolor='red')
plt.ylabel('$N_{stars}$')

ax2 = ax1.twiny()
ax2.set_xscale("log")
newpos=[.1,.32,1,3.2,10,32,100]
newlabel=[0.1,0.32,1.0,3.2,10,32,100]
ax2.set_xticks(newpos)
ax2.set_xticklabels(newlabel)
ax2.xaxis.set_ticks_position('top')
ax2.xaxis.set_label_position('top')
ax2.set_xlim(ax1.get_xlim())




#SECOND PLOT, NOT REALLY NECESSARY
ax3=subplot(212)
ax3.set_xlim([0,100])
plt.hist(allsep,bins=[0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80],facecolor='red')
plt.xlabel('Projected Separation (AU)')
plt.ylabel('$N_{stars}$')


plt.savefig('dhist.png',dpi=300)
plt.show()

plot

谢谢!

1 个答案:

答案 0 :(得分:0)

当我尝试运行您的代码时,第一条错误消息是UserWarning: Attempted to set non-positive xlimits for log-scale axis;...
所以-您使用什么版本的python和matplotlib?也许您应该考虑进行更新。

但是,在此之前,您可以先简单地测试一下,如果将x轴限制的设置更改为[0.1,...]:

ax1.set_xlim([0.1,100])