【问题标题】:Plot with 3 different x axis and the same y axis in matplotlib?在matplotlib中用3个不同的x轴和相同的y轴绘制?
【发布时间】:2021-05-30 09:37:34
【问题描述】:

我一直在尝试绘制一个具有 3 个不同 x 轴但 y 轴相同且相同的连续曲线的图形。 x 轴的第一部分上升到一个点(在图中,为零)。轴的第二部分是不同的比例(图中显示在顶部)。第三部分从第一部分结束的地方开始(在这种情况下为零)。我想绘制没有任何中断的曲线。可以在 matplotlib 中完成图片中的类似操作吗?提前谢谢你。

【问题讨论】:

  • 您可能想查看设置“符号日志”比例。参见例如What is the difference between 'log' and 'symlog'?
  • 亲爱的约翰,感谢您的建议!但是,我真正需要的是能够呈现不同的、单独的尺度,这里没有对数或符号对数的尺度。
  • 这样的事情可以在 matplotlib 中完成。我看到的唯一问题是底部刻度停止并从零开始。如果 x 轴像这样中断,曲线怎么可能是连续的?或者您是否想通过使用顶轴来创建某种缩放,例如用于放大 -0.001 和 +0.001 之间的 x 值?
  • 亲爱的帕特里克,曲线对应于遵循二维几何内路径的温度曲线。这条路径从一个固定的 y 位置开始,但随后发生变化(x 中的坐标是固定的,并且在 y 中变化)并且在到达另一个点后,y 再次固定并沿着线再次在 x 中变化(在 2D 几何中,路径形成某种“肘部”)。如果我不包括路径的 y 变化部分,那么我会在图中出现不连续性,这是我不想要的。但可能有更好的方法来做到这一点。

标签: matplotlib axes multiple-axes


【解决方案1】:

有点不清楚中心部分应该是什么样子,以及该轴应该具有哪种缩放比例。但一般结构可以如下创建:

import matplotlib.pyplot as plt
import numpy as np

fig, (ax1, ax2, ax3) = plt.subplots(ncols=3, sharey=True,
                                    gridspec_kw={'wspace': 0, 'width_ratios': [3, 2, 3]})
for side in ('top', 'right'):
    ax1.spines[side].set_visible(False)
ax2.spines['bottom'].set_visible(False)
for side in ('left', 'right', 'top'):
    ax3.spines[side].set_visible(False)
ax2.xaxis.tick_top()
for side in ('left', 'right'):
    ax2.spines[side].set_linestyle((0, (4, 4)))
ax2.set_zorder(2)  # to show the dashed axes
ax2.tick_params(axis='y', left=False, right=False)
ax3.tick_params(axis='y', left=False, right=False)

ax1.set_xlim(-2.5, 0)
ax2.set_xlim(-1, 1)
ax3.set_xlim(0, 2.5)

x = np.linspace(-2.5, 2.5, 500)
y = np.sin(np.pi * x * np.abs(x))
ax1.plot(x, y)
ax2.plot(x, y)
ax3.plot(x, y)
plt.tight_layout()
plt.show()

【讨论】:

  • 亲爱的 Johan,这正是我想要的。非常感谢!
猜你喜欢
  • 2015-09-11
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
  • 1970-01-01
  • 2019-03-10
  • 2018-01-12
  • 2022-01-16
相关资源
最近更新 更多