I have a boxplot generated with matplotlib:
However, I have no idea how to generate the legend. Whenever I try the following I get an error saying Legend does not support {boxes: ...
I've done a fair bit of searching and there doesn't seem to be an example showing how to achieve this. Any help would be appreciated!
bp1 = ax.boxplot(data1, positions=[1,4], notch=True, widths=0.35, patch_artist=True) bp2 = ax.boxplot(data2, positions=[2,5], notch=True, widths=0.35, patch_artist=True) ax.legend([bp1, bp2], ['A', 'B'], loc='upper right')
MatPlotLib with PythonPlace the first legend at the upper-right location. Add artist, i.e., first legend on the current axis. Place the second legend on the current axis at the lower-right location. To display the figure, use show() method.
MatPlotLib with Python Add an axes to the current figure as a subplot arrangement. Make a box and whisker plot using boxplot() method with different facecolors. To place the legend, use legend() method with two boxplots, bp1 and bp2, and ordered label for legend elements. To display the figure, use show() method.
Multiple Legends. Sometimes when designing a plot you'd like to add multiple legends to the same axes. Unfortunately, Matplotlib does not make this easy: via the standard legend interface, it is only possible to create a single legend for the entire plot. If you try to create a second legend using plt.
The boxplot
returns a dictionary of artists
result : dict
A dictionary mapping each component of the boxplot to a list of the matplotlib.lines.Line2D instances created. That dictionary has the following keys (assuming vertical boxplots):
boxes
: the main body of the boxplot showing the quartiles and the median’s confidence intervals if enabled.- [...]
Using the boxes
, you can get the legend artists as
ax.legend([bp1["boxes"][0], bp2["boxes"][0]], ['A', 'B'], loc='upper right')
Complete example:
import matplotlib.pyplot as plt import numpy as np; np.random.seed(1) data1=np.random.randn(40,2) data2=np.random.randn(30,2) fig, ax = plt.subplots() bp1 = ax.boxplot(data1, positions=[1,4], notch=True, widths=0.35, patch_artist=True, boxprops=dict(facecolor="C0")) bp2 = ax.boxplot(data2, positions=[2,5], notch=True, widths=0.35, patch_artist=True, boxprops=dict(facecolor="C2")) ax.legend([bp1["boxes"][0], bp2["boxes"][0]], ['A', 'B'], loc='upper right') ax.set_xlim(0,6) plt.show()
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