J'ai besoin de créer un tracé personnalisé (voir image) où chaque cercle est une variable et sa couleur en représente la valeur. J'ai aussi besoin d'une corrélation entre la valeur de la variable et sa couleur, donc si je change la valeur de la variable, cela change également la couleur de son cercle dans le tracé. Je ne sais pas où puis-je apprendre cela. https://i.stack.imgur.com/9PnZq.png

0
Davitens 30 janv. 2020 à 18:40

1 réponse

Meilleure réponse

Voici un exemple de cercles à colorier en fonction d'une certaine valeur. Le code crée des listes de 20 positions x et y, et une liste de 20 valeurs aléatoires entre -1 et 1. En fonction de leur valeur, les cercles sont colorés du rouge au jaunâtre au vert.

from matplotlib import pyplot as plt
import random

x = [i // 4 for i in range(20)]
y = [i % 4 for i in range(20)]
z = [random.uniform(-1, 1) for i in range(20)]

# create a scatter plot for the given x,y positions, make them quite large, color them
# using z and the Red-Yellow-Green color map, give them a black border 

plt.scatter(x, y, s=400, c=z, cmap='RdYlGn', ls='-', edgecolors='black')

plt.colorbar() # add a colorbar to show how the values correspond to colors

plt.xlim(-0.9, 4.9) # because of very large scatter dots, the default limits are too narrow
plt.ylim(-0.9, 3.9)

plt.show() # display the plot on the screen

resulting image

Voici une approche possible pour dessiner une grille 12x4 avec 3 valeurs :

from matplotlib import pyplot as plt
import random

num_columns = 12
num_rows = 4
num_values = 3
x = [[j for j in range(num_columns)] for i in range(num_rows)]
y = [[i for j in range(num_columns)] for i in range(num_rows)]
z = [[random.randint(1, num_values) for j in range(num_columns)] for i in range(num_rows)]

plt.scatter(x, y, s=400, c=z, cmap='RdYlGn', ls='-', edgecolors='black')

cbar = plt.colorbar(ticks=range(1, num_values + 1))
cbar.ax.set_yticklabels([f'Value {v}' for v in range(1, num_values + 1)])

plt.xlim(-0.5, num_columns - 0.5)
plt.ylim(-0.5, num_rows - 0.5)
plt.xticks(range(num_columns))
plt.yticks(range(num_rows))

plt.show()

12x4 plot

0
JohanC 1 févr. 2020 à 18:27