Reputation: 505
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.
Upvotes: 5
Views: 3324
Reputation: 10328
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.
Upvotes: 3