Como criar uma única legenda para todos os subquadros em Matplotlib
-
Faça uma única legenda para todos os subquadros com o método
figure.legend
em Matplotlib -
Faça uma única legenda para todos os subquadros com o método
figure.legend
quando as linhas e os cabos são diferentes na Matplotlib
A classe Matplotlib figure
tem um método de legend
para colocar a legend
no nível da figura, mas não no nível do subplot
. É especialmente conveniente se o padrão e as etiquetas das linhas forem os mesmos entre todos os subquadros.
Faça uma única legenda para todos os subquadros com o método figure.legend
em Matplotlib
import matplotlib.pyplot as plt
fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)
for ax in fig.axes:
ax.plot([0, 10], [0, 10], label="linear")
lines, labels = fig.axes[-1].get_legend_handles_labels()
fig.legend(lines, labels, loc="upper center")
plt.show()
lines, labels = fig.axes[-1].get_legend_handles_labels()
Porque temos a presunção de que todos os subquadros têm as mesmas linhas e etiquetas, portanto, que as alças e etiquetas dos últimos Axes
poderiam ser utilizadas para toda a figura.
Faça uma única legenda para todos os subquadros com o método figure.legend
quando as linhas e os cabos são diferentes na Matplotlib
Se o padrão de linha e as etiquetas são diferentes entre os subquadros, mas uma única legenda é necessária para todos os subquadros, precisamos obter todos os cabos de linha e etiquetas de todos os subquadros.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 501)
fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)
axes[0, 0].plot(x, np.sin(x), color="k", label="sin(x)")
axes[0, 1].plot(x, np.cos(x), color="b", label="cos(x)")
axes[1, 0].plot(x, np.sin(x) + np.cos(x), color="r", label="sin(x)+cos(x)")
axes[1, 1].plot(x, np.sin(x) - np.cos(x), color="m", label="sin(x)-cos(x)")
lines = []
labels = []
for ax in fig.axes:
axLine, axLabel = ax.get_legend_handles_labels()
lines.extend(axLine)
labels.extend(axLabel)
fig.legend(lines, labels, loc="upper right")
plt.show()
for ax in fig.axes:
axLine, axLabel = ax.get_legend_handles_labels()
lines.extend(axLine)
labels.extend(axLabel)
Todas as linhas e rótulos são adicionados à lista de lines
e labels
com o método de extend
no caso de existirem mais linhas e rótulos em um único subplot.
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook