2

继我的问题之后:强制 Y 轴只使用整数和我在那里得到的巨大帮助我在绘制一个漂亮的图表时遇到了另一个问题。

我正在使用 pyplot 模块在图表顶部绘制带有一些参考点的第二轴,但我似乎无法让底部和顶部 x 轴就据称相同的位置达成一致......

图形制作器的当前输出...

如果您查看图表,您会看到 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)

任何想法为什么他们不排队?我确定我一路上做了一些愚蠢的事情..

4

1 回答 1

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)-inf0log

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

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

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

或者如果您使用下限 of1代替,您会看到:

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

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

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

于 2012-08-22T12:25:57.670 回答