matplotlib - 第二个X轴有一个偏移量(第一个X轴),我无法确定

时间:2012-08-22 08:56:43

标签: python matplotlib

继续我的问题:Force the Y axis to only use integers以及我在那里获得的巨大帮助我还有另一个问题,就是绘制一个漂亮的图表。

我正在使用pyplot模块绘制第二个轴,并在图形顶部绘制一些参考点,而我似乎无法得到底部和顶部x轴以确定所声称的相同位置的位置。 ..

Current output from the graph maker...

如果您在图表上查看,您会看到1 Kb的标记(虚线)和第2轴的自动收报机标签不同意。与1 Mb相同,但1Gb似乎排成一行。

第二轴来自一个重叠的子图(据我所知)在这里开始:

fig = plt.figure()
ax1 = fig.add_subplot(111)

我对轴使用相同的约束:

 ax1.set_xscale("log", basex=2)
 ax1.set_xlim(0,34359738368)  

ax2 = ax1.twiny()
ax2.set_xlim(0,34359738368)
ax2.set_xscale("log", basex=2)

和两组标记的值相同:

ax1.axvline(x=1024, color='black', linestyle='--')
ax1.axvline(x=1048576, color='black', linestyle='--')
ax1.axvline(x=1073741824, color='black', linestyle='--')

ax2.set_xticks([1024, 1048576, 1073741824])
ax2.set_xticklabels(['1 Kbyte','1 Mbyte','1 Gbyte'], fontsize=8)

为什么他们没有排队的任何想法?我确信我在这路上做了一些蠢事......

1 个答案:

答案 0 :(得分:1)

当我准确地运行您发布的片段时,我会得到一个图表,显示您看到的分歧,但也不同意x限制是什么:

In [68]: ax1.get_xlim()
Out[68]: (9.9999999999999995e-08, 34359738368.0)

In [69]: ax2.get_xlim()
Out[69]: (0.0, 34359738368.0)

这显然是因为您为不同的轴以不同的顺序调用了set_xscale()set_xlim(),而log(0)给出了-inf。如果您将0作为边界,然后设置log轴,它会尝试从中恢复,显然,但不是相反。

如果您使用0但使用相同的顺序:

In [103]: ax1.get_xlim()
Out[103]: (0.0, 34359738368.0)

In [104]: ax2.get_xlim()
Out[104]: (0.0, 34359738368.0)

或者如果您使用1的下限,则会看到:

In [88]: ax1.get_xlim()
Out[88]: (1.0, 34359738368.0)

In [89]: ax2.get_xlim()
Out[89]: (1.0, 34359738368.0)

我自己,我会使用第二种方法:更明确,并且不会引入顺序依赖。