J'ai un problème où je reçois une image et je dois recréer cette image en utilisant python et matplotlib, sklearn, numpy. Voici l'image:
Voici le code que j'ai écrit jusqu'à présent en python:
import matplotlib.pyplot as plt from sklearn.datasets import load_iris import numpy as np iris = load_iris() print(type(iris)) print(iris['target_names']) print(iris['data']) print(iris['target']) print(iris['DESCR']) print(iris['feature_names']) fig = plt.figure() ax1 = plt.subplot(2, 1, 1) ax2 = plt.subplot(2, 1, 2) iris = load_iris() data = np.array(iris['data']) targets = np.array(iris['target']) cd = {0: 'r', 1: 'b', 2: 'g'} cols = np.array([cd[target] for target in targets]) ax1.scatter(data[:, 0], data[:, 1], c=cols) ax2.scatter(data[:, 0], data[:, 2], c=cols) plt.show()
Je suis complètement perdu et j'ai vraiment besoin d'aide pour dépasser celui-ci, je n'ai que les 2 premiers sous-graphiques. Tout conseil serait très utile car j'essaie de comprendre celui-ci depuis quelques jours.
3 Réponses :
Une façon d'obtenir une figure avec des sous-lots correspondants serait
subs[0][0].scatter(x,y)
subs est alors un tableau 2D des ares, vous pouvez donc faire:
fig, subs = plt.subplots(4,3)
Voici un exemple
from matplotlib import pyplot as plt import numpy as np x = np.linspace(-5, 5, 10) y = np.random.rand(10) fig, ax = plt.subplots(nrows=4, ncols=3, figsize=(8, 6)) # ax is a 2d array with shape (4, 3), it can be sliced just like a numpy array for row in range(4): for col in range(3): ax[row][col].scatter(x, y, c='color you want') plt.show()
@Wynand Roberts des questions?
Merci beaucoup, pas de questions
Nous espérons que ceci explique exactement comment créer les images demandées:
import matplotlib.pyplot as plt from sklearn.datasets import load_iris import numpy as np fig, subs = plt.subplots(4,3) #setting the shape of the figure in one line as opposed to creating 12 variables iris = load_iris() ##code as per the example data = np.array(iris['data']) targets = np.array(iris['target']) cd = {0:'r',1:'b',2:"g"} cols = np.array([cd[target] for target in targets]) # Row 1 subs[0][0].scatter(data[:,0], data[:,1], c=cols) subs[0][1].scatter(data[:,0], data[:,2], c=cols) subs[0][2].scatter(data[:,0], data[:,3], c=cols) # Row 2 subs[1][0].scatter(data[:,1], data[:,0], c=cols) subs[1][1].scatter(data[:,1], data[:,2], c=cols) subs[1][2].scatter(data[:,1], data[:,3], c=cols) # Row 3 subs[2][0].scatter(data[:,2], data[:,0], c=cols) subs[2][1].scatter(data[:,2], data[:,1], c=cols) subs[2][2].scatter(data[:,2], data[:,3], c=cols) #Row 4 subs[3][0].scatter(data[:,3], data[:,0], c=cols) subs[3][1].scatter(data[:,3], data[:,1], c=cols) subs[3][2].scatter(data[:,3], data[:,2], c=cols) plt.show()
Consultez seaborn , il est utilisé pour tracer des données et les présenter de manière similaire à l'image que vous avez fournie
Utilisez subplots
"Je n'ai que les 2 premières sous-parcelles correctement" Vous créez seulement 2 sous-parcelles, combien voulez-vous obtenir correctement?
Notez que 2 fonctionnalités sont utilisées pour chaque sous-tracé. c'est-à-dire que les 2 premiers sous-graphiques proviennent de notre exemple de traçage du jeu de données d'iris. C'est un problème de permutation. Parmi 4 fonctionnalités, choisissez 2, ce qui équivaut à 12 choix au total. C'est pourquoi il y a 12 sous-parcelles au total. C'est le seul conseil que je reçois pour m'aider, donc 12 au total
de Seaborn pairplot
Il n'y a que 2 sous-graphiques dans votre code.
J'ai adoré utiliser les paires de seaborn, merci @AbishekAditya
et @QuangHoung