如何在Seaborn地块中显示标签(没有在图例中放置带有标签的手柄)?

时间:2018-12-24 20:34:24

标签: 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()

图例给出错误: No handles with labels found to put in legend.

4 个答案:

答案 0 :(得分:1)

在您的情况下,ylabel已经设置为c0,因此不需要图例。

如果您坚持使用图例,建议不要使用sns。相反,请尝试使用pandas的matplotlib界面

dx = pd.DataFrame({'c0':range(5), 'c1':range(5,10)})
dx.set_index('c0').plot(marker='o', )

或者直接使用matplotlib的API更加灵活

plt.plot(dx.c0, dx.c1, marker='o', label='child')
plt.legend()

答案 1 :(得分:1)

sns.pointplot()并非仅用于在同一图中绘制多个数据框属性,而是用于可视化它们之间的关系,在这种情况下,它将生成自己的标签。您可以通过将labels参数传递给ax.legend()(请参见Add Legend to Seaborn point plot)来覆盖它们,但是一旦更改了图,则可能会有些混乱。

要使用海洋美学来制作剧情,我会这样做:

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()

结果:

enter image description here

答案 2 :(得分:1)

如果您使用的是import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt dx = pd.DataFrame({'c0':range(5), 'c1':range(5,10)}) dx.index = list('abcde') # reset the index and melt the remaining columns dx1 = dx.reset_index().melt(id_vars='index') print(dx1) index variable value 0 a c0 0 1 b c0 1 2 c c0 2 3 d c0 3 4 e c0 4 5 a c1 5 6 b c1 6 7 c c1 7 8 d c1 8 9 e c1 9 ,则应尝试使用整洁(或“长”)数据而不是“宽”数据。看到有关Organizing Datasets

的链接
# modified the "x" and "data" parameters
# added the "hue" parameter and removed the "color" parameter
ax = sns.pointplot(x='index',
                y="value",
                data=dx1,
                hue='variable',
                scale=0.5, dodge=True,
                capsize=.2)

# get handles and labels from the data so you can edit them
h,l = ax.get_legend_handles_labels()

# keep same handles, edit labels with names of choice
ax.legend(handles=h, labels=['child', 'teen'])

plt.show()

您现在可以绘制一次,而不是绘制两次

{{1}}

plot

答案 3 :(得分:0)

经过一些练习,我使用熊猫本身找到了解决方案,

dx.plot(kind='line',marker='o',xticks=range(5))

给出情节: enter image description here