当前位置: 首页 > 知识库问答 >
问题:

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

傅阿苏
2023-03-14

下面是我的问题:强制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)

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

共有1个答案

令狐翰
2023-03-14

当我准确地运行您发布的代码片段时,我会得到一个图表,其中显示了您看到的分歧,但也不同意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\u xscale()和set\u xlim(),而log(0)给出了inf。如果将0作为边界,然后设置日志轴,它显然会尝试从中恢复,但不会反过来。

如果您使用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)

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

 类似资料:
  • 问题内容: 我有一个非常简单的问题。我需要在绘图上有第二个x轴,并且我希望该轴具有一定数量的tic,它们对应于第一个x轴的特定位置。 让我们尝试一个例子。在这里,我将暗物质质量绘制为膨胀系数(定义为1 /(1 + z))的函数,该膨胀系数的范围为0到1。 我想在图的顶部放置另一个x轴,以显示对应于某些膨胀系数值的z轴。那可能吗?如果是的话,我怎么能拥有xtics斧头 问题答案: 我正在从@Dhar

  • 问题内容: 我想基于内轴拆分nd numpy数组。 我有各种各样的形状 我想要一个数组列表- 我使用了,但这给了我0轴的列表。 问题答案: 或将150维放在首位。然后就可以使用了。 或者您可以使用列表理解 移调效果更好

  • 我有一个漂亮的JFreeChart生成的折线图,有一个例外——我X轴上的最后一个值被截断了,就像这样: (注意,以兆赫为单位的z被切断)。 我在这里研究了解决方案: JFreeChart勾号标签切断 但是因为我在中手动指定范围,所以从JavaDoc中可以看出设置边距没有效果 JavaDoc 这是我用来生成X轴的代码: 如果有帮助的话,我还使用以下方法将此内容写入. svg文件: 假设setUppe

  • 到目前为止,除了第一个和最后一个标签(Su和S)上的值之外,一切都很好。有没有办法添加填充,这样Su在X轴的左边有一些填充,可以完全渲染圆,S在右边有一些填充,这样S的圆值就可以完全渲染。我试着手动设置填充,通过许多例子,但是到目前为止还没有正确的工作。有人有什么想法,可以指出正确的方向,那就太好了。谢谢!

  • 我在matplotlib中绘制了一个条形图,其中包括从3个不同数据帧中的一列中获取数据,具有相同的x轴,并将条形图从一侧绘制到另一侧 除了x轴只标记每五个位置而不是所有位置外,它基本上都可以工作?如何标记每个位置? 给予:

  • 性能分析图中如果设置双x轴,第二个label无论如何也显示不出来,只能看到轴线,请问应该如何更改以显示出图标上方x轴的label