Je veux que l'edgecolor d'une ellipse soit une fonction d'une troisième variable. Supposons que la troisième variable s'appelle flux. Si la valeur de la variable 'flux' est haute, je veux que la couleur de l'ellipse soit bleu foncé, si la valeur est basse, je veux que la couleur soit jaune. Toutes les valeurs intermédiaires doivent être un mélange de ces couleurs. Je veux que ce dégradé de couleurs soit visible sur l'axe z du graphique avec les valeurs les plus hautes et les plus basses. J'ai essayé de me référer à ce lien Matplotlib scatterplot; colour as a function of a third variable mais cela ne semble pas s'appliquer dans mon cas. Je lis les paramètres nécessaires pour tracer l'ellipse d'un fichier texte qui ressemble à ceci:Edgecolor d'Ellipse en fonction d'une troisième variable
149.20562 2.29594 0.00418 0.00310 83.40 1.15569
149.23158 1.99783 0.00437 0.00319 90.30 3.46331
149.23296 2.45440 0.00349 0.00264 120.30 2.15457
La cinquième colonne est la colonne nommée « flux » sur la base duquel le gradient de couleur doit être tracée.
Voici un exemple de ma tentative.
import matplotlib.pyplot as plt
import numpy as np
import math
import astropy.io.ascii as asciitable
from matplotlib.patches import Ellipse
ax = plt.gca()
path="https://stackoverflow.com/users/xxxx/Desktop/"
plt.xlim([149,151.3])
plt.ylim([1,3.3])
fw=open(path + 'data_plot.txt', 'r')
data = asciitable.read(path+ "data_plot.txt")
np.array(data)
for i in range(len(data)):
ra,dec,maj,minor,ang,flux =data[i][0],data[i][1],data[i][2],data[i][3],data[i][4],data[i][5]
ellipse = Ellipse(xy=(ra, dec), width=maj, height=minor, angle=ang, edgecolor=flux, lw=3, fc='None')
ax.add_patch(ellipse)
plt.xlabel('Right Ascention')
plt.ylabel('Declination')
plt.title('abc')
plt.savefig(path+'abc.eps')
Comme prévu, cela n'a pas fonctionné. Voici mon journal des erreurs.
runfile('/users/vishnu/.spyder2-py3/radio_sources.py', wdir='/users/vishnu/.spyder2-py3')

Traceback (most recent call last):
File "<ipython-input-695-a0011c0326f5>", line 1, in <module>
runfile('/users/vishnu/.spyder2-py3/radio_sources.py', wdir='/users/vishnu/.spyder2-py3')
File "https://stackoverflow.com/users/vishnu/anaconda3/lib/python3.5/site-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 699, in runfile
execfile(filename, namespace)
File "https://stackoverflow.com/users/vishnu/anaconda3/lib/python3.5/site-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 88, in execfile
exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace)
File "https://stackoverflow.com/users/vishnu/.spyder2-py3/radio_sources.py", line 63, in <module>
ellipse = Ellipse(xy=(ra, dec), width=maj, height=minor, angle=ang, edgecolor=flux, lw=3, fc='None')
File "https://stackoverflow.com/users/vishnu/anaconda3/lib/python3.5/site-packages/matplotlib/patches.py", line 1378, in __init__
Patch.__init__(self, **kwargs)
File "https://stackoverflow.com/users/vishnu/anaconda3/lib/python3.5/site-packages/matplotlib/patches.py", line 111, in __init__
self.set_edgecolor(edgecolor)
File "https://stackoverflow.com/users/vishnu/anaconda3/lib/python3.5/site-packages/matplotlib/patches.py", line 277, in set_edgecolor
self._edgecolor = colors.colorConverter.to_rgba(color, self._alpha)
File "https://stackoverflow.com/users/vishnu/anaconda3/lib/python3.5/site-packages/matplotlib/colors.py", line 376, in to_rgba
'to_rgba: Invalid rgba arg "%s"\n%s' % (str(arg), exc))
ValueError: to_rgba: Invalid rgba arg "1.15569"
to_rgb: Invalid rgb arg "1.15569"
cannot convert argument to rgb sequence
Comment afficher la carte de couleur sur l'axe z de sorte que si quelqu'un voit le complot, ils savent que le jaune indique une faible valeur et le bleu indique la valeur plus élevée? – Vishnu
Je pense que c'est plus facile en utilisant un 'PatchCollection' et en définissant une palette de couleurs. Voir ma réponse éditée ci-dessus. – tom
C'était une réponse très bien expliquée. Je vous remercie. :) – Vishnu