J'essaie d'utiliser matplotlib pour créer un nuage de points avec de très petits points gris. En raison de la densité de points, les points doivent être petits. Le problème est que les marqueurs de la fonction scatter () semblent avoir à la fois une ligne et un remplissage. Lorsque les marqueurs sont petits, seule la ligne est visible, pas le remplissage, et la ligne n'est pas de la bonne couleur (elle est toujours noire).
Je peux obtenir exactement ce que je veux en utilisant gnuplot: tracez des 'nœuds' avec les points pt 0 lc rgb 'grey'
Comment puis-je créer de très petits points gris en utilisant matplotlib scatterplot ()?
scatter([1,2,3], [2,4,5], s=1, facecolor='0.5', lw = 0)
Ceci définit la taille du marqueur sur 1 (s = 1), la couleur de la façade sur gris (couleur de la façade = '0.5') et la largeur de ligne sur 0 (lw = 0).
Si le marqueur n'a pas de visage (ne peut pas être rempli, par exemple '+'
, 'x'
), la variable edgecolor
doit être définie à la place de c
et lw
ne doit pas être 0
:
scatter([1,2,3], [2,4,5], marker='+', edgecolor='r')
Ce qui suit ne fonctionnera pas
scatter([1,2,3], [2,4,5], s=1, marker='+', facecolor='0.5', lw = 0)
parce que le bord/la ligne ne sera pas affiché, donc rien ne sera affiché.
La réponse la plus simple et absolue à votre question est la suivante: utilisez le paramètre color
au lieu du paramètre c
pour définir la couleur de l’ensemble du marqueur.
Il est facile de voir la différence en comparant les résultats:
from matplotlib import pyplot as plt
plt.scatter([1,2,3], [3,1,2], c='0.8') # marker not all gray
plt.scatter([1,2,3], [3,1,2], color='0.8') # marker all gray
Détails: Pour votre cas d'utilisation simple où vous souhaitez simplement que votre marqueur soit de la même nuance de gris, vous ne devriez vraiment pas avoir à vous soucier de choses comme la couleur du visage par rapport à la couleur de l'Edge, et si votre marqueur est défini comme toutes les arêtes ou certaines arêtes et certaines zones de remplissage. À la place, utilisez simplement le paramètre color
et sachez que votre marqueur entier sera défini sur la couleur unique que vous spécifiez!
En réponse à la question de zwol en commentaire - ma réputation n'est pas assez élevée pour laisser des commentaires, il faudra donc que: vous pouvez utiliser color =
comme illustré ci-après:
from matplotlib import pyplot
x = [1,5,8,9,5]
y = [4,2,4,7,9]
numSides = [2,3,1,1,5]
cmap = pyplot.cm.get_cmap("copper_r")
min, max = min(numSides), max(numSides)
for i in range(len(x)):
if numSides[i] >= 2:
cax = pyplot.scatter(x[i], y[i], marker = '+', s = 100, c = numSides[i], cmap = cmap)
cax.set_clim(min, max)
Elif numSides[i] == 1:
pyplot.scatter(x[i], y[i], marker = '.', s = 40, color = cmap(numSides[i]))
fig = pyplot.gcf()
fig.set_size_inches(8.4, 6)
fig.savefig('figure_test.png', dpi = 200)
pyplot.show()