Je veux un tracé où l'axe y est catégorique, par exemple
plt.scatter(x=dic, y=classes) plt.show()
et l'axe des x est la liste des nombres
dic =
{
1: {"A", "B"},
2: {"D"},
3: {"C", "D", "E"},
4: {},
...
}
Maintenant, chaque numéro peut avoir un ensemble correspondant
nums = [1,2,3,4,5,6,7,8,9]
Pour chaque nombre, je veux tracer un point de dispersion pour la classe correspondante si elle est présente. Quelque chose comme ça. Comment y parvenir avec matplotlib?
J'ai essayé un tas de ceci, par exemple:
classes = ["A","B","C","D","E"]
Mais cela ne fonctionne pas avec l'erreur ValueError: x et y doivent avoir la même taille
3 Réponses :
Si l'ordre de l'axe y n'est pas important, le code ci-dessous devrait faire l'affaire -
import matplotlib.pyplot as plt
dic = {
1: {"A", "B"},
2: {"D"},
3: {"C", "D", "E"},
4: {}
}
x_values = []
y_values = []
for key in dic:
for value in dic[key]:
x_values.append(key)
y_values.append(value)
print(x_values)
print(y_values)
fig, ax = plt.subplots()
ax.scatter(x_values, y_values)
plt.show()
Cela donnerait le graphique suivant -
Vous devez créer une liste de points pour utiliser le nuage de points. Une doublure est ci-dessous.
x, y = list(zip(*[[a, b] for a in dic for b in dic[a]])) plt.scatter(x, y)