我试图使用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.
答案 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()
结果:
答案 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}}
答案 3 :(得分:0)