2010-12-18 70 views
23

在Python中,使用Matplotlib,如何簡單地使用透明度(alpha < 1)執行散點圖,但帶有代表其顏色值的顏色條,但具有alpha = 1?部分透明的散點圖,但帶有純色條

這是一個得到什麼,與from pylab import *; scatter(range(10), arange(0, 100, 10), c=range(10), alpha=0.2); color_bar = colorbar()

alt text

如何彩條進行非透明?

PS:我試過color_bar.set_alpha(1); draw(),但這並沒有做任何事情......

+0

但由於這是一個散點圖,顏色欄會指示什麼?它應該對應每個點的大小,'''或每個點的顏色,'C'? – 2010-12-18 16:17:16

+0

@Steve:顏色條會映射點的顏色。 – EOL 2010-12-18 16:53:23

回答

25

好吧,我發現做這件事,看起來比較乾淨:(使用問題的ColorBar對象)

color_bar.set_alpha(1) 
color_bar.draw_all() 
# pylab.draw() or pyplot.draw() might be necessary 

這將是巨大的,得到但確認這是繼續進行的最穩健的方式! :)

+0

哦,'draw_all'。有趣。 – 2010-12-18 21:36:21

+0

如果我不需要彩條標籤,該怎麼辦?即使我已經設置了'color_bar.ax.set_yticklabels([])'',draw_all()也會使標籤出現。 – 2014-09-24 06:12:26

+0

我不知道如何做到這一點......我試着先清除顏色條軸('color_bar.ax.cla()'),但是再次用'draw_all()'繪製顏色條失敗。 – EOL 2014-09-24 08:56:44

9

這是一個巨大的,醜陋的黑客。但沒有其他辦法可行。也許別人可以改進。

fig1 = pylab.figure() 
fig2 = pylab.figure() 
ax1 = fig1.add_subplot(111) 
ax2 = fig2.add_subplot(111) 
ax1.scatter(range(10), range(10), c=range(10), alpha=0.2) 
im = ax2.scatter(range(10), range(10), c=range(10), alpha=1.0) 
fig1.colorbar(im, ax=ax1) 
fig1.show() 

alt text

+0

+1:有趣的想法!一個缺點是當調用pyplot.show()時可能會得到一個額外的數字(可能會被破壞,可以說......)。 – EOL 2010-12-18 21:35:27

+0

確實,它創造了一個新的數字。那真是一種「最後的手段」解決方案。 :-) – 2010-12-18 21:37:30