绘制多个 seaborn 图时,图例未显示

8

通常我使用matplotlib图例没有问题,但这是我第一次在多个seaborn图中使用它,以下内容无法正常工作。

fig = plt.figure(figsize=(10,6))
a =sns.regplot(x='VarX', y='VarY1', data=data)
b = sns.regplot(x='VarX', y='VarY2', data=data)
c = sns.regplot(x='VarX', y='VarY3', data=data)
fig.legend(handles=[a, b, c],labels=['First','Second','Third'])
fig.show()

我做错了什么?

1个回答

13

seaborn.regplot 返回一个轴对象。你不能从轴对象创建一个图例代理句柄。然而,这甚至不是必要的。只需从图例中删除 handles 即可得到所需的图形。

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)
import pandas as pd
import seaborn as sns

data=pd.DataFrame({"VarX" : np.arange(10), 
                   'VarY1': np.random.rand(10),
                   'VarY2': np.random.rand(10),
                   'VarY3': np.random.rand(10)})

fig = plt.figure(figsize=(10,6))
sns.regplot(x='VarX', y='VarY1', data=data)
sns.regplot(x='VarX', y='VarY2', data=data)
sns.regplot(x='VarX', y='VarY3', data=data)
fig.legend(labels=['First','Second','Third'])
plt.show()

在这里输入图片描述


对我不起作用:它给出了“TypeError: legend()缺少1个必需的位置参数:'handles'”。我正在使用matplotlib v2.0.2。 - famargar
3
是的,fig.legend() 只能在2.1及以上版本中使用。但是你可以在坐标轴上调用图例,因为所有的图都是该坐标轴的一部分,使用 ax.legend() 即可。 - ImportanceOfBeingErnest

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