【问题标题】:Setting active subplot using axes object in matplotlib?在 matplotlib 中使用轴对象设置活动子图?
【发布时间】:2014-06-25 19:06:19
【问题描述】:

面向对象的 matplotlib 子图接口很好,但在调用包含 plt.plot(x, y 之类的行的函数时我很难使用它。这些函数很容易与plt.subplot() 一起使用,但是是否可以使用给定的轴对象设置活动子图?具体来说,我希望将以下内容绘制成两个单独的子图:

import matplotlib.pyplot as plt

x = [0 ,1, 2]
y= [0 ,1 2]

fig, axs = plt.subplots(2,1)

plt.some_function_to_set_active_subplot(axs[0])
plt.plot(x, y)

plt.some_function_to_set_active_subplot(axs[1])
plt.plot(x, y)

some_function_to_set_active_subplot这样的功能吗?

编辑: 我特别不能使用 ax.plot 或类似的东西。我基本上是在问如何将面向对象的界面与 matlab 风格的界面混合在一起。

编辑 2: 我也不想使用 plt.subplot。我想使用 OO 接口设置子图,并使用 matlab 样式进行实际绘图。

【问题讨论】:

  • axs[0].plot(...) 呢?
  • 我不能用那个。假设我有一些函数plotter(x, y),其中包含一个plt.plot 内部调用,我无法将函数更改为调用axs[0].plot()
  • 您可能想要更改该函数以获取额外的参数ax
  • 同意,我倾向于用我个人编写的代码来做这件事,但有时重构是不可能的,或者是不希望的。

标签: python matplotlib


【解决方案1】:

您可以使用plt.axes 设置当前活动轴。来自documentation:“axes(h) 其中 h 是一个坐标区实例,使 h 成为当前坐标轴。”

import matplotlib.pyplot as plt

x = [0 ,1, 2]
y = [10 ,20, 30]

fig, axs = plt.subplots(2,1)

plt.axes(axs[0])
plt.plot(x,y)
plt.axes(axs[1])
plt.plot(y,x)
plt.show()

【讨论】:

  • 还有plt.sca(ax)
  • 谢谢@tcaswell! plt.sca(ax) 比 plt.axes(ax) 好吗? (如果您必须使用其中任何一个。)
  • 谢谢!这很棒。 plt.gca -- plt.sca,呵呵
  • plt.sca 更好,因为它只是设置当前轴。如果你使用plt.axes 做一些逻辑来检查它是否需要创建一个轴。如果您查看源代码plt.axes 使用plt.gcf().sca(ax)
【解决方案2】:

不推荐使用 plt.axes 方法。请改用plt.sca。按照上面的例子:

import matplotlib.pyplot as plt

x = [0 ,1, 2]
y = [10 ,20, 30]

fig, axs = plt.subplots(2,1)

plt.sca(axs[0])
plt.plot(x,y)
plt.sca(axs[1])
plt.plot(y,x)
plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多