I am tying to change the location as well as labels of my legend in Seaborn scatterplot. Here is my code:
ax_total_message_ratio=sns.scatterplot(x='total_messages', y='email_messages_ratio',hue='poi',data=df_new)
ax_total_message_ratio.set_title("Email Messages Ratio vs. Total Messages Across Poi",y=1.12,fontsize=20,fontweight='bold')
ax_total_message_ratio.set_ylabel('Email Messages Ratio')
ax_total_message_ratio.set_xlabel('Total Messages')
ax_total_message_ratio.legend.loc("lower right")
put.show()
But I am getting following error message;
'function' object has no attribute 'loc'
. Can I get some help on how to control legends with Seaborn? Additionally, I also need to replace 0
by No and 1
by Yes in the legend labels. Thanks
Changing the location of Seaborn legends We use matplotlib. pyplot. legend() function from matplotlib library and pass the bbox_to_anchor parameter which allows us to pass an (x,y) tuple with the required offset for changing the location of the seaborn legends.
Changing Marker Color on a Scatter Plot You can change the color of a scatter plot by first passing the letter of the color name to the color parameter of the scatterplot() function.
With Seaborn's move_legend() function, we can easily change the position to common legend places. For example, to move the legend to lower right of Seaborn plot we specify “lower right” to move_legend() function. Note now the legend is moved to the lower left corner of the plot.
You can adjust the position using the loc
keyword in calling legend()
, like
ax_total_message_ratio.legend(loc="lower right")
To include custom labels for your markers you can create a custom legend, i.e.
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
custom = [Line2D([], [], marker='.', color='b', linestyle='None'),
Line2D([], [], marker='.', color='r', linestyle='None')]
fig = plt.figure(figsize=(8,5))
plt.legend(custom, ['Yes', 'No'], loc='lower right')
plt.show()
This will give you
and should remove the automatically generated legend, leaving only the custom legend.
You can use the convenience method get_legend_handles_labels() to get the handles and the text of the labels:
ax=sns.scatterplot(x='total_messages', y='email_messages_ratio',hue='poi',data=df_new)
handles, labels = ax.get_legend_handles_labels()
ax.legend(handles, ['Yes', 'No'], loc='lower right')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With