我有这个代码:
import pandas as pd
df = pd.read_csv(r'C:\Users\ASUS\Downloads\number-of-natural-disaster-events.csv')
df.drop(['Code'], axis = 1)
df_pivot = df.pivot(index='Year',columns='Entity',values='Number of reported natural disasters (reported disasters)')
df_pivot = df_pivot.drop(['Impact'],axis=1)
df_pivot = df_pivot.fillna(0)
df_pivot = df_pivot.reset_index()
df_pivot
fig, ax = plt.subplots(1, 1, sharey=True, sharex=True, figsize=(20, 10))
legend = []
for col in df_pivot.columns:
if col != "Year":
sns.regplot(ax=ax,data=df_pivot,x="Year", y=col)
legend.append(col)
ax.legend(legend,bbox_to_anchor=(0.5, -0.1),fancybox=True,loc='upper center',shadow=True,
ncol=2)
CSV文件可用here。
当我尝试代码时,我得到了这样的图表:
为什么图例输出错误?我试图使图例所有的自然灾害,以其各自的颜色线,但给圆圈代替。
有趣的是,如果我把regplot改为lineeplot,它会工作,所以我不确定是什么问题,因为我真的想使用seaborn.regplot
2条答案
按热度按时间1qczuiv01#
如果您从sns中获取线条颜色,并使用Line2D将其添加到图例中,则可以正常工作。
idfiyjo82#
你可以给线关键字添加一个标签,使线自动出现在图例中,代码也可以简化一点,而不需要重置索引并使用
x=
作为索引。下面的代码使用seaborn的flights数据集以便于重现:
如果你同时需要线和标记,你可以为每个
regplot
添加两个标签,使用ax.get_legend_handles_labels()
你可以获取所有的andle和标签放入图例中,然后将它们组合成元组。