2012-02-24 17 views
5

Matplotlib'de bar3d() öğesini kullanarak Python'da bir 3D çubuk histogramı oluşturmaya çalışıyorum.Python matplotlib -> 3B çubuk grafiği -> kene etiketinin konumunu ayarlama, saydam çubuklar

ben bunu bazı verileri geçtikten sonra ekranda benim histogramı görüntüleyebilir noktaya var ama şu şaşırıp:

  1. gösteriliyor eksenleri doğru (şu anda nihai dışarı özlüyor etiketler (veya ilk?) işaretler)
  2. Her bir eksenin üzerindeki işaretlerin yapılması (örn. 'Mon' için) ya ilgili mavi çubuğa işaret eder ya da onay etiketini büyük işaretler arasında konumlandırır.
  3. Çubukların yarı saydam hale getirilmesi.
Ben 'balta' örneğine birkaç farklı argümanlar geçen denedi, ama rağmen çalışmaya şey yok ve ben birlikte bunu sağlamak ne yanlış anlamış şüpheli

image of plot uploaded here

. Bu konuda herhangi bir yardım için çok minnettar olacağım.

from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import numpy as np 

#from IPython.Shell import IPShellEmbed 
#sh = IPShellEmbed() 

data = np.array([ 
[0,1,0,2,0], 
[0,3,0,2,0], 
[6,1,1,7,0], 
[0,5,0,2,9], 
[0,1,0,4,0], 
[9,1,3,4,2], 
[0,0,2,1,3], 
]) 

column_names = ['a','b','c','d','e'] 
row_names = ['Mon','Tue','Wed','Thu','Fri','Sat','Sun'] 

fig = plt.figure() 
ax = Axes3D(fig) 

lx= len(data[0])   # Work out matrix dimensions 
ly= len(data[:,0]) 
xpos = np.arange(0,lx,1) # Set up a mesh of positions 
ypos = np.arange(0,ly,1) 
xpos, ypos = np.meshgrid(xpos+0.25, ypos+0.25) 

xpos = xpos.flatten() # Convert positions to 1D array 
ypos = ypos.flatten() 
zpos = np.zeros(lx*ly) 

dx = 0.5 * np.ones_like(zpos) 
dy = dx.copy() 
dz = data.flatten() 

ax.bar3d(xpos,ypos,zpos, dx, dy, dz, color='b') 

#sh() 
ax.w_xaxis.set_ticklabels(column_names) 
ax.w_yaxis.set_ticklabels(row_names) 
ax.set_xlabel('Letter') 
ax.set_ylabel('Day') 
ax.set_zlabel('Occurrence') 

plt.show() 

cevap

7

sadece alfa parametresini kullanmak zorunda, barlar yarı saydam yapmak için: Burada

i üzerinde çalışıyorum kod örneğidir. alpha = 0% 100 şeffaf iken alfa = 1 (varsayılan)% 0 saydam demektir.

bu deneyin, yarı saydam çubukları yapmak için hazırlayacağız:

ax.bar3d(xpos,ypos,zpos, dx, dy, dz, color='b', alpha=0.5) 

kene konumu ile ilgili olarak, böyle bir şey (plt.xticks veya plt ilk listeyi kullanarak bunu yapabilirsiniz. yticks Eğer kene bulmak istiyoruz "değerleri" içerir ve ikinci liste aslında kene) aramak istediğiniz şeyi içerir: enter image description here

: sonunda

#ax.w_xaxis.set_ticklabels(column_names) 
#ax.w_yaxis.set_ticklabels(row_names) 

ticksx = np.arange(0.5, 5, 1) 
plt.xticks(ticksx, column_names) 

ticksy = np.arange(0.6, 7, 1) 
plt.yticks(ticksy, row_names) 

, bu rakam olsun

+0

Merhaba, öneriniz için teşekkürler. I a bağımsız değişken ile çalıştı, ancak aşağıdaki hata aldı: ax.bar3d içinde 'Dosya "matrix_to_3D_histogram.py", hat 43, (xpos, YPOS, zpos, dx, dy, DZ, renk =' B ', alpha = 0.5) TypeError: bar3d() beklenmedik bir anahtar kelime argümanı aldım' alpha'' – Dman

+0

Bu garip, hiç sorunum yok ve kodunuzu kopyaladım ve size söylediğim satırı değiştirdim. Hangi sürümü kullanıyorsunuz? Matplotlib 1.1.0 kullanıyorum. – carla

+0

@Dan matplotlib türünün sürümünü test etmek için şunu deneyin: import matplotlib; matplotlib .__ version__' – Hooked