在Matplotlib中绘制到特定轴的图形

10

我该如何在matplotlib中绘制到特定的坐标轴上? 我创建了自己的对象,它有自己的plot方法,并采用标准参数和kwargs来调整线条颜色、宽度等,我也想能够绘制到特定的坐标轴上。

我看到有一个axes属性,它接受一个Axes对象,但无论如何它仍然只绘制到最后创建的坐标轴上。

下面是我想要的一个例子

fig, ax = subplots(2, 1)

s = my_object()
t = my_object()

s.plot(axes=ax[0])
t.plot(axes=ax[1])

我建议你阅读这篇文章:https://dev59.com/8GYq5IYBdhLWcg3wui0z#14261698 - tacaswell
2个回答

9
如我在评论中所述,请阅读如何将一个pyplot函数附加到一个figure实例?,了解面向对象和状态机接口之间的matplotlib区别。
您应该修改绘图函数,使其类似于:
def plot(..., ax=None, **kwargs):
    if ax is None:
        ax = gca()
    ax.plot(..., **kwargs)

谢谢,这非常接近我最终所做的。不过你能告诉我为什么有一个axes属性吗?根据文档,设置此属性应该将线条与该轴相关联,但我没有看到这一点。 - dvreed77
我认为这是文档生成方式的一个缺陷,Line2D 对象有一个 axes 属性,但它是由 plot 中的代码设置的,而你传递的值会被忽略。你能告诉我文档在哪里说它应该有这种行为吗? - tacaswell

3
您可以使用特定轴的plot函数:
import matplotlib.pyplot as plt
from scipy import sin, cos
f, ax = plt.subplots(2,1)
x = [1,2,3,4,5,6,7,8,9]
y1 = sin(x)
y2 = cos(x)
plt.sca(ax[0])
plt.plot(x,y1)
plt.sca(ax[1])
plt.plot(x,y2)
plt.show()

这应该绘制到两个不同的子图中。


是的,我知道我可以这样做,但对于我的类定义中的绘图函数来说并不起作用。我想我可以手动查看是否设置了axes属性,但我不太明白为什么绘图函数会使用axes属性,如果它不是为了在该坐标轴上绘制。 - dvreed77
我已经修改了示例,使用sca()函数来设置当前活动轴。现在它应该能够正常运行,可以在你的类中使用普通的plot函数。 - Harpe
你的类中的绘图函数是如何工作的?对我来说,你的示例在 matplotlib.pyplot 的绘图命令中运行良好。图形是在指定的坐标轴上绘制的。 - Rutger Kassies
2
哎呀,那是一个非常绕的方式来完成这个任务!原始版本更可取。 - tacaswell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接