1
votes

Comment tracer plusieurs sous-graphiques à l'aide de python

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:

Result Wanted Picture

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.


8 commentaires

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


3 Réponses :


0
votes

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)


0 commentaires

1
votes

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()


2 commentaires

@Wynand Roberts des questions?


Merci beaucoup, pas de questions



2
votes

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()


0 commentaires