這裏是做所有的更換一次過解決辦法:
import matplotlib.colors as clr
import matplotlib.pyplot as plt
import numpy as np
N = 100000
x = 1.2 + 800.0 * np.random.rand(N)
y = 1.2 + 800.0 * np.random.rand(N)
# Generate random colors of the form (r, g, b, a) where r = 0.0
colors = np.random.rand(4 * N).reshape((N, 4))
colors[:, 0] = 0.0
area = np.pi * (5 * np.random.rand(N))**2
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
pcol = ax.scatter(x, y, s=area, c=colors)
ax.set_xscale('log')
ax.set_yscale('log')
# Save initial figure
plt.savefig("hue.jpg")
oldRGBA = pcol.get_facecolors().reshape((N, 1, 4))
oldRGB = oldRGBA[:, :, :3]
newRGB = oldRGB
newRGB[:, :, 0] = 1.0 # Set red component to 1.0
oldHSV = clr.rgb_to_hsv(oldRGB)
newHSV = clr.rgb_to_hsv(newRGB)
oldHSV[:, :, 0] = newHSV[:, :, 0]
newRGBA = np.copy(oldRGBA)
newRGBA[:, :, :3] = clr.rgb_to_hsv(oldHSV)
pcol.set_facecolors(newRGBA[:, 0, :])
# Save modified figure
plt.savefig("hue_bis.jpg")
plt.close()
正如你所看到的,這個代碼試圖繪製100000點,其實它成功地做到這一點,大約2秒鐘。這裏的數字產生:

和:

關於你的最後兩個問題:
如何改變一個給定的RGBA的色調色彩A與給定的RGB色彩B的色彩同時保留A的α值?
和:使用
將不同的顏色模式(HSL例如)簡化任務,如果是這樣,這將有助於
我覺得你的方法做這樣的一個修改是可觀的,它避免了手工計算(見HSL and HSV)。使用不同的顏色模型是可能的,HSL和HSV都可以在不影響其他參數的情況下改變色調,但這只是另一種方式,而不是更好的方法。
希望這會有所幫助。
這很有趣;雖然沒有提供一種方法來提高代碼的性能,但它給了我一個觀察其他人的代碼如何去實現(並且我的代碼不會更慢)的觀點。 –
哦!我預計一次性會有更好的表現。我會仔細觀察一下。你有工作的代碼實現你的解決方案,並允許我自己節省時間嗎? – Flabetvibes
不幸的是,我沒有;我的代碼位於數據可視化工具中,我認爲改變色調可能是我應用於可視化的操作之一的瓶頸。我無法真正提取它,它沒有寫得夠高雅。但實際上,你的回答基本上回答了我的問題:這實際上是一個瓶頸,我能更快地處理東西嗎?原來,顯然不是,所以現在我可以轉向其他潛在的問題。 –