3
votes

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

1
Can you include screenshots and/or the data you used to plot with so I can test your code? - Shaun Lowis

1 Answers

1
votes

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.