Legendas (Marcadores)
Número de colunas
O número de colunas dentro da legenda pode ser controlado através do parâmetro ncol, que recebe um número (int) maior do que 0 (padrão é 1). Por exemplo, para deixar a legenda com duas colunas, basta passar ncol = 2.
plt.figure(figsize=(8,6))
plt.scatter(cachorro_peso, cachorro_altura, label="Cachorros")
plt.scatter(gatos_peso, gatos_altura, label="Gatos")
plt.plot(pinguins_peso, pinguins_altura, marker="o", c="g", label="Pinguins")
plt.xlabel("Peso (kg)")
plt.ylabel("Altura (cm)")
plt.title("Relação entre peso e altura de diferentes animais")
plt.ylim([0,125])
plt.legend(ncol=2)
plt.show()
Figura 1 - Legendas com o número de colunas alterado.

Observe que se o valor passado para ncol for maior do que o número de labels inseridos, o número de colunas será igual a número total de labels inseridos.
Por exemplo, caso ncol=40, obtemos apenas 3 colunas:
plt.figure(figsize=(8,6))
plt.scatter(cachorro_peso, cachorro_altura, label="Cachorros")
plt.scatter(gatos_peso, gatos_altura, label="Gatos")
plt.plot(pinguins_peso, pinguins_altura, marker="o", c="g", label="Pinguins")
plt.xlabel("Peso (kg)")
plt.ylabel("Altura (cm)")
plt.title("Relação entre peso e altura de diferentes animais")
plt.ylim([0,125])
plt.legend(ncol=40)
plt.show()
Figura 2 - Legendas com o número de colunas alterado.

Número de marcadores
É possível determinar o número de marcadores que são inseridos na legenda. O parâmetro que deve ser utilizado para realizar esta alteração, depende do tipo de método que foi utilizado para desenhar o gráfico.
plt.plot()
O número de marcadores dentro da legenda é controlado através do parâmetro numpoints, passando um int maior do que 0 (padrão é 1).
Por exemplo, para alterar o número de pontos para 3:
plt.figure(figsize=(8,6))
plt.scatter(cachorro_peso, cachorro_altura, label="Cachorros")
plt.scatter(gatos_peso, gatos_altura, label="Gatos")
plt.plot(pinguins_peso, pinguins_altura, marker="o", c="g", label="Pinguins")
plt.xlabel("Peso (kg)")
plt.ylabel("Altura (cm)")
plt.title("Relação entre peso e altura de diferentes animais")
plt.ylim([0,125])
plt.legend(ncol=2, numpoints=3)
plt.show()
Figura 3 - Legendas com o número de marcadores alterado.

Observe que apenas a legenda referente aos Pinguins, que foi criada utilizando o plt.plot(), teve o número de pontos alterado para 3, enquanto que as demais seguem com apenas um marcador na legenda.
plt.scatter()
O número de marcadores dentro da legenda é controlado através do parâmetro scatterpoints, passando um int maior do que 0 (padrão é 1).
plt.figure(figsize=(8,6))
plt.scatter(cachorro_peso, cachorro_altura, label="Cachorros")
plt.scatter(gatos_peso, gatos_altura, label="Gatos")
plt.plot(pinguins_peso, pinguins_altura, marker="o", c="g", label="Pinguins")
plt.xlabel("Peso (kg)")
plt.ylabel("Altura (cm)")
plt.title("Relação entre peso e altura de diferentes animais")
plt.ylim([0,125])
plt.legend(ncol=2, scatterpoints=3)
plt.show()
Figura 4 - Legendas com o número de marcadores alterado.

Observe que a legenda referente aos Gatos e aos Cachorros, que foi criada utilizando o plt.scatter(), teve o número de pontos alterado para 3.
plt.scatter() e plt.plot()
É possível utilizar o scatterpointse o numpoints ao mesmo tempo, e com valores diferentes. Dessa forma, é possível alterar o número de marcadores dos elementos criados com o plt.scatter() e com o plt.plot().
plt.figure(figsize=(8,6))
plt.scatter(cachorro_peso, cachorro_altura, label="Cachorros")
plt.scatter(gatos_peso, gatos_altura, label="Gatos")
plt.plot(pinguins_peso, pinguins_altura, marker="o", c="g", label="Pinguins")
plt.xlabel("Peso (kg)")
plt.ylabel("Altura (cm)")
plt.title("Relação entre peso e altura de diferentes animais")
plt.ylim([0,125])
plt.legend(ncol=2, scatterpoints=3, numpoints=2)
plt.show()
Figura 5 - Legendas com o número de marcadores alterado.

Offset dos marcadores
É possível controlar a distância vertical dos marcadores dentro da legenda, o que é feito através do parâmetro scatteryoffsets. Este parâmetro deve receber uma sequência (list, tuple, ndarray, etc) contendo números do tipo float com valores entre 0.0 e 1.0 (padrão é [0.375, 0.5, 0.3125]).
Por exemplo, para deixar todos os marcadores na mesma altura, basta passar um único valor através de uma list ([0.5]).
plt.figure(figsize=(8,6))
plt.scatter(cachorro_peso, cachorro_altura, label="Cachorros")
plt.scatter(gatos_peso, gatos_altura, label="Gatos")
plt.plot(pinguins_peso, pinguins_altura, marker="o", c="g", label="Pinguins")
plt.xlabel("Peso (kg)")
plt.ylabel("Altura (cm)")
plt.title("Relação entre peso e altura de diferentes animais")
plt.ylim([0,125])
plt.legend(ncol=2, scatterpoints=3, numpoints=2, scatteryoffsets=[0.5])
plt.show()
Figura 6 - Legendas com a posição dos marcadores alterada.

Para variar estas distâncias, basta passar valores distintos em cada elemento da list passada. Por exemplo:
plt.figure(figsize=(8,6))
plt.scatter(cachorro_peso, cachorro_altura, label="Cachorros")
plt.scatter(gatos_peso, gatos_altura, label="Gatos")
plt.plot(pinguins_peso, pinguins_altura, marker="o", c="g", label="Pinguins")
plt.xlabel("Peso (kg)")
plt.ylabel("Altura (cm)")
plt.title("Relação entre peso e altura de diferentes animais")
plt.ylim([0,125])
plt.legend(ncol=2, scatterpoints=3, numpoints=2, scatteryoffsets=[0.2, 0.5, 0.9])
plt.show()
Figura 7 - Legendas com a posição dos marcadores alterada.

Observe que a legenda referente aos Gatos e aos Cachorros, que foi criada utilizando o plt.scatter(), teve a posição alterada, enquanto que a legenda referente aos Pinguins, que foi criada utilizando o plt.plot(), não teve mudança.
Escala dos marcadores
Podemos controlar a escala relativa dos marcadores dentro da legenda em relação ao tamanho original, o que é feito através do parâmetro markerscale. Este parâmetro que deve receber um número (float ou int), sendo que o valor padrão é 1.0.
plt.figure(figsize=(8,6))
plt.scatter(cachorro_peso, cachorro_altura, label="Cachorros")
plt.scatter(gatos_peso, gatos_altura, label="Gatos")
plt.plot(pinguins_peso, pinguins_altura, marker="o", c="g", label="Pinguins")
plt.xlabel("Peso (kg)")
plt.ylabel("Altura (cm)")
plt.title("Relação entre peso e altura de diferentes animais")
plt.ylim([0,125])
plt.legend(ncol=2, markerscale=2.5)
plt.show()
Figura 8 - Legendas com o tamanho dos marcadores alterada.

Posição dos marcadores em relação ao label
É possível alterar a posição em que o marcador é desenhado na legenda em relação ao label, o que é feito através do parâmetro markerfirst, que deve receber um valor bool (True (padrão) ou False).
- Caso
markerfirst = True(padrão) o marcador é desenhado à esquerda do texto da legenda; - Caso
markerfirst = Falseo marcador é desenhado à direita do texto da legenda;
Por exemplo, para deixar o marcador do lado esquerdo do label, basta passar markerfirst = False:
plt.figure(figsize=(8,6))
plt.scatter(cachorro_peso, cachorro_altura, label="Cachorros")
plt.scatter(gatos_peso, gatos_altura, label="Gatos")
plt.plot(pinguins_peso, pinguins_altura, marker="o", c="g", label="Pinguins")
plt.xlabel("Peso (kg)")
plt.ylabel("Altura (cm)")
plt.title("Relação entre peso e altura de diferentes animais")
plt.ylim([0,125])
plt.legend(ncol=2, markerfirst=False)
plt.show()
Figura 9 - Legendas com a posição dos marcadores em relação aos labels alterada.
