legend colors are not matching seaborn

Question:

I am using sns.pointplot and since there is no label attribute I’ve decided to create my custom legend but my problem is that the colors do not match.

my dataframe looks like this:

                  deploy    deployed_today_rent total_rent  cum_deploy  hourly percent  cum_percent
10min                       
2019-10-01 05:30:00 6           0   0   6   0.000000    0.000000
2019-10-01 05:40:00 0           0   0   6   0.000000    0.000000
2019-10-01 05:50:00 6           0   0   12  0.000000    0.000000
2019-10-01 06:00:00 13          0   0   25  0.000000    0.000000
2019-10-01 06:10:00 0           0   0   25  0.000000    0.000000
2019-10-01 06:20:00 0           1   1   25  0.040000    0.040000
2019-10-01 06:30:00 0           0   0   25  0.000000    0.040000
2019-10-01 06:40:00 0           1   1   25  0.040000    0.080000
2019-10-01 06:50:00 1           1   1   26  0.038462    0.118462

fig,(ax1)= plt.subplots(nrows=1)
fig.set_size_inches(22,17)

sns.pointplot(data=test, x=test.index, y="total_rent", ax=ax1,color="blue", label="total")
sns.pointplot(data=test, x=test.index, y="deployed_today_rent", ax=ax1, color="green", label="deployed_rent")
sns.pointplot(data=test, x=test.index, y="cum_deploy", ax=ax1, color="#BEC647", label="cum_deploy")

ax1.legend(labels=["total", "deployed_rent", "cum_deploy"], fontsize=15)

plt.savefig("test.png", dpi=300, bbox_inches="tight");

It successfully creates a legend however colors in the legend does not match the lines.

enter image description here

Asked By: chaikov

||

Answers:

From the legend guide, you can do this by creating a ‘proxy artist’ for each line using matplotlib.lines.Line2D like so

from matplotlib.lines import Line2D

a = Line2D([], [], color='blue', label='total')
b = Line2D([], [], color='green', label='deployed_rent')
c = Line2D([], [], color='#BEC647', label='cum_deploy')
plt.legend(handles=[a, b, c])

Which should produce a legend with three different color lines of default width with their respective labels.

Answered By: William Miller
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.