继续我的问题:Force the Y axis to only use integers以及我在那里获得的巨大帮助我还有另一个问题,就是绘制一个漂亮的图表。
我正在使用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)
为什么他们没有排队的任何想法?我确信我在这路上做了一些蠢事......
答案 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)
我自己,我会使用第二种方法:更明确,并且不会引入顺序依赖。