iterando marcadores en parcelas

Estoy tratando de denotar las predicciones con un color y las etiquetas correctas como marcadores para el conjunto de datos del iris. Esto es lo que tengo hasta ahora:

from sklearn.mixture import GMM
import pandas as pd
from sklearn import datasets
import matplotlib.pyplot as plt
import itertools

iris = datasets.load_iris()
x = iris.data
y = iris.target
gmm = GMM(n_components=3).fit(x)
labels = gmm.predict(x)
fig, axes = plt.subplots(4, 4)
Superman = iris.feature_names
markers = ["o" , "s" , "D"]
Mi=[]
for i in range(150):
  Mi.append(markers[y[i]])

for i in range(4):
    for j in range(4):
        if(i != j):
            axes[i, j].scatter(x[:, i], x[:, j], c=labels, marker = Mi, s=40, cmap='viridis')
        else:
            axes[i,j].text(0.15, 0.3, Superman[i], fontsize = 8)

No estoy seguro de por qué los colores se repiten y los marcadores no, pero ¿hay alguna manera de asignar a cada marcador un cierto valor como el color? También falla cuando ingreso los valores numéricos de y.

El código que devuelve es:

Estilo de marcador no reconocido ['o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', ' o ',' o ',' o ',' o ',' o ',' o ',' o ',' o ',' o ',' o ',' o ',' o ',' o ' , 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', 'o', ' o ',' o ',' o ',' o ',' o ',' o ',' o ',' o ',' o ',' o ',' o ',' o ',' o ' , 'o', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', ' s ',' s ',' s ',' s ',' s ',' s ',' s ',' s ',' s ',' s ',' s ',' s ',' s ' , 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', 's', ' s ',' s ',' s ',' s ',' s ',' s ',' s ',' s ',' s ',' s ',' s ',' s ',' s ' , 's', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', ' D ',' D ',' D ',' D ',' D ',' D ',' D ',' D ',' D ',' D ',' D ',' D ',' D ' , 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D', 'D ',' D ']

Respuestas a la pregunta(2)

Su respuesta a la pregunta