Je veux réaliser ce qui suit. J'ai un tracé x-y avec une fonction y dépendante de x. Le tracé est constitué d'un maillage de carrés. Lorsqu'un point de fonction est à l'intérieur du bloc de fonction, le bloc change de couleur. J'ai joint un exemple:

enter image description here

Je veux faire une figure similaire, mais je veux pouvoir rendre la taille de la grille variable.

Je sais comment faire un tracé avec plt.plot (), mais je ne suis pas familier avec la création d'une grille et le remplissage de cette grille si le point de fonction tombe dans un carré. Quelqu'un peut-il se référer aux fonctions numpy ou mathplotlib qui peuvent aider?

Merci

1
Tim 19 oct. 2020 à 18:19

2 réponses

Meilleure réponse

Vous pouvez utiliser np.histogram2d pour créer un fichier 2D histogramme et tracez les emplacements avec un nombre supérieur à zéro avec {{X1 }}:

import numpy as np
import matplotlib.pyplot as plt

# Input data
x = np.linspace(-2, 2, 300)
y = np.sin(x)
# Plot limits
x_min, x_max = -3, 3
y_min, y_max = -2, 2

plt.figure(figsize=(8, 3))
# First plot
resolution = 25
xg = np.linspace(x_min, x_max, resolution)
yg = np.linspace(y_min, y_max, resolution)
h, _, _ = np.histogram2d(x, y, (xg, yg))
plt.subplot(121)
# Transpose because imshow swaps X and Y axes
plt.imshow(h.T > 0, origin='lower', extent=(xg[0], xg[-1], yg[0], yg[-1]))
# Show grid
plt.gca().set_xticks([], minor=False)
plt.gca().set_xticks(xg, minor=True)
plt.gca().set_yticks([], minor=False)
plt.gca().set_yticks(yg, minor=True)
plt.grid(True, 'minor')
# Second plot
resolution = 50
xg = np.linspace(x_min, x_max, resolution)
yg = np.linspace(y_min, y_max, resolution)
h, _, _ = np.histogram2d(x, y, (xg, yg))
plt.subplot(122)
plt.imshow(h.T > 0, origin='lower', extent=(xg[0], xg[-1], yg[0], yg[-1]))
plt.gca().set_xticks([], minor=False)
plt.gca().set_xticks(xg, minor=True)
plt.gca().set_yticks([], minor=False)
plt.gca().set_yticks(yg, minor=True)
plt.grid(True, 'minor')
# Show plot
plt.tight_layout()
plt.show()

Résultat:

Result plot

1
jdehesa 20 oct. 2020 à 09:28

Voici un morceau de code qui devrait fonctionner pour les graphes centrés autour de (min (X) -max (X)) et (min (Y), max (Y)):

import numpy as np

def grid_plot(X,Y,resx,resy) :
 d_x=resx/(np.max(X)-np.min(X))
 d_y=resy/(np.max(Y)-np.min(Y))
 mat=np.zeros((resy,resx))
 for i in range(len(X)) :
    mat[int((Y[i]-np.min(Y))*d_y),resx-int((X[i]-np.min(X))*d_x)]=1
 return mat
2
NHL 19 oct. 2020 à 15:31