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)