Pou*_*del 5 python matplotlib seaborn
我试图使用 seaborn 进行绘图,但标签没有显示出来,即使它被分配在轴对象中。
如何在情节上显示标签?
这是我的代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
dx = pd.DataFrame({'c0':range(5), 'c1':range(5,10)})
dx.index = list('abcde')
ax = sns.pointplot(x=dx.index,
y="c0",
data=dx, color="r",
scale=0.5, dodge=True,
capsize=.2, label="child")
ax = sns.pointplot(x=dx.index,
y="c1",
data=dx, color="g",
scale=0.5, dodge=True,
capsize=.2, label="teen")
ax.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)
图例给出了错误:
No handles with labels found to put in legend.
sns.pointplot()不仅仅用于在同一图中绘制多个数据框属性,而是用于可视化它们之间的关系,在这种情况下它将生成自己的标签。您可以通过将labels参数传递给它们来覆盖它们ax.legend()(请参阅将图例添加到 Seaborn 点图),但是一旦您对图进行了更改,很可能会出现一些混乱。
要使用 seaborn 美学生成您的图,我会这样做:
sns.set_style("white")
fig, ax = plt.subplots()
plt.plot(dx.index, dx.c0, "o-", ms=3,
color="r", label='child')
plt.plot(dx.index, dx.c1, "o-", ms=3,
color="g", label='teen')
ax.legend()
Run Code Online (Sandbox Code Playgroud)
结果:
在您的情况下, ylabel 已设置为c0,因此不需要图例。
如果你坚持传奇,我建议不要使用sns。相反,请尝试使用 pandas 的 matplotlib 接口
dx = pd.DataFrame({'c0':range(5), 'c1':range(5,10)})
dx.set_index('c0').plot(marker='o', )
Run Code Online (Sandbox Code Playgroud)
或者直接使用matplotlib的API,更加灵活
plt.plot(dx.c0, dx.c1, marker='o', label='child')
plt.legend()
Run Code Online (Sandbox Code Playgroud)