在Matplotlib子图中添加一行

16

我想使用matplotlib绘制两个子图并在它们中都添加一条水平线。这可能是基础操作,但我不知道如何指定其中一条线应该画在第一个图上,它们最后都出现在了最后一个图中。例如:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline

s1= pd.Series(np.random.rand(10))
s2= pd.Series(np.random.rand(10))

fig, axes = plt.subplots(nrows=2,ncols=1)

f1= s1.plot(ax=axes[0])
l1=plt.axhline(0.5,color='black',ls='--')
l1.set_label('l1')

f2= s1.plot(ax=axes[1])
l2=plt.axhline(0.7,color='red',ls='--') 
l2.set_label('l2')

plt.legend()

水平线子图

axhline函数没有像pandas plot函数一样将“ax”作为参数,所以可以这样写:

l1=plt.axhline(0.5,color='black',ls='--',ax=axes[0])

我阅读了matplotlib中的示例,并尝试了另一个选项,但这个选项也不起作用(很可能有充分的理由)

axes[0].plt.axhline(0.5,color='black',ls='--')

我该如何在子图中绘制线条?最好还能带上图例。谢谢!


2
你尝试过 axes[0].axhline(0.5,color='black',ls='--') 吗?这应该可以解决问题。 - Nick Becker
是的!谢谢@NickBecker!我只需要解决图例出现在两个子图中的问题 :-)。我可能会删除这个问题,因为我意识到它有点愚蠢。 - Nabla
如果我想要一条斜线怎么办? - pitosalas
1个回答

12

在@Nick Becker的帮助下,我回答了自己的“语法”问题。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline


s1= pd.Series(np.random.rand(10))
s2= pd.Series(np.random.randn(10))

fig, axes = plt.subplots(nrows=2,ncols=1)

f1= s1.plot(ax=axes[0],label='s1')
l1=axes[0].axhline(0.5,color='black',ls='--')
l1.set_label('l1')

axes[0].legend(loc='best')

f2= s1.plot(ax=axes[1],label='s2')

l2=axes[1].axhline(0.5,color='black',ls='--')

l2.set_label('l2')

axes[1].legend(loc='best')

带有横线的子图


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