在 matplotlib 子图中添加一行

Posted

技术标签:

【中文标题】在 matplotlib 子图中添加一行【英文标题】:add a line to matplotlib subplots 【发布时间】:2017-07-20 22:34:58 【问题描述】:

我想用 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 没有“ax”作为参数,就像 pandas 的绘图函数一样。所以这会起作用:

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

我在 matplotlib 中阅读了 the examples 并尝试使用另一个不起作用的选项(可能有充分的理由)

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

如何在子图中画线?最好是传奇谢谢!

【问题讨论】:

你试过axes[0].axhline(0.5,color='black',ls='--')吗?这应该有效。 是的!谢谢@尼克贝克!我只需要解决出现在两个子图中的图例问题:-)。我可能会删除这个问题,因为我意识到这有点愚蠢。 如果我想要某种对角线呢? 【参考方案1】:

在@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')

【讨论】:

以上是关于在 matplotlib 子图中添加一行的主要内容,如果未能解决你的问题,请参考以下文章

python使用matplotlib可视化subplots绘制子图自定义几行几列子图,如果M行N列,那么最终包含M*N个子图在指定的子图中添加可视化结果

Matplotlib - 在错误的子图中绘制的变量[重复]

Matplotlib - 在错误的子图中绘制的变量[重复]

matplotlib如何在子图中正确绘制文本[重复]

如何在 Python matplotlib 子图中显示图例

如何在 Matplotlib 的子图中独立绘制相同的图形? [复制]