我希望橢圓的邊緣顏色是第三個變量的函數。我們假設第三個變量稱爲通量。如果變量'flux'的值很高,我希望橢圓的邊緣顏色是深藍色,如果值很低,我希望顏色變成黃色。任何中間值都應該是這些顏色的混合。我希望這個顏色漸變在最高和最低值的圖的z軸上可見。我試過指向這個鏈接Matplotlib scatterplot; colour as a function of a third 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
第五欄是基於名爲「流量」上的顏色漸變,必須繪製列。
這是我的嘗試的一個例子。
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')
正如所料,這沒有奏效。這是我的錯誤日誌。
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
如何顯示在z軸的彩色地圖,這樣,如果有人看到的情節,他們知道,黃色表示低值和藍色表示更高的價值? – Vishnu
我認爲使用PatchCollection並定義色彩映射更容易。看到我上面編輯的答案。 – tom
這是一個很好解釋的答案。謝謝。 :) – Vishnu