【问题标题】:matplotlib - Second X axis has an offset (wrt 1st X axis) I can't pin downmatplotlib - 第二个 X 轴有一个偏移量(相对于第一个 X 轴)我无法确定
【发布时间】:2012-08-22 08:56:43
【问题描述】:

从我的问题开始: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)

知道为什么他们不排队吗?我确定我一路上做了一些愚蠢的事情..

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    当我准确地运行你发布的 sn-ps 时,我得到一个图表,显示你看到的分歧,但也不同意 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)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      • 2015-04-02
      • 2015-12-16
      相关资源
      最近更新 更多