2010-12-18 19 views
23

Python'da, Matplotlib ile, saydamlık ile bir dağılım grafiği (alfa < 1) nasıl yapılır, ancak renk değerlerini temsil eden bir renk çubuğu bulunur, ancak alfa = 1? İşteKısmen şeffaf dağılım grafiği, ancak düz bir renk çubuğuyla

biri from pylab import *; scatter(range(10), arange(0, 100, 10), c=range(10), alpha=0.2); color_bar = colorbar() ile alır şudur:

alt text

nasıl renk çubuğu şeffaf olmayan hale getirilebilir? PS

: Ben color_bar.set_alpha(1); draw() çalıştı, ancak bu

+0

Fakat bir dağılım grafiği olduğundan, renk çubuğu ne gösterir? Her noktanın büyüklüğüne karşılık geldiğinde, 's' veya her noktanın rengi,' c'? –

+0

@Steve: Renk çubuğu, noktaların rengini eşler. – EOL

cevap

25

Tamam, ben nispeten temiz görünüyor, bunu yapmak için bir yol bulmuş bunun devam etmenin en sağlam yolu olduğunu teyit et! :)

+0

Oh, 'draw_all'. İlginç. –

+0

Renk çubuğu etiketlerini istemiyorsam ne olur? draw_all() ', 'color_bar.ax.set_yticklabels ([])' ayarlanmış olsa bile etiketlerin görünmesini sağlar. –

+0

Bunun nasıl yapılacağından emin değilim… Önce renk çubuklarını temizlemeye çalıştım ('color_bar.ax.cla()'), ancak sonra drawbar (draw_all() ile hata rengini tekrar çiziyorum). – EOL

9

Bu büyük, çirkin kesmek olduğunu ... hiçbir şey yapmadı. Ama başka hiçbir yol işe yaramaz. Belki başka biri geliştirebilir. Bir olsun çok iyi olurdu

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

(sorudan ColorBar nesnesini kullanarak):

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: ilginç bir fikir! Bir dezavantajı, 'pyplot.show()' çağrıldığında (bu, imha edilebilir, tartışılabilir…) bir ek rakam almanızdır. – EOL

+0

Gerçekten de, yeni bir rakam yaratıyor. Bu gerçekten "son çare" çözümdü. :-) –