2013-05-01 37 views
5

VẤN ĐỀMatplotlib - normals sai về 3D thanh âm mưu


Khi sử dụng matplotlib và âm mưu thanh 3d trên một biểu đồ tôi đã normals giá trị sai về một số gương mặt thanh.


VÍ DỤ


Khi tôi vẽ một đồ thị thùng mật độ cao, với 240 quán bar, tôi nhận được kết quả này: enter image description here

Thấy rằng một số gương mặt của một số quán bar là sai ? Các thanh Z cũng bị sai.


GIỚI THIỆU


Tôi đang sử dụng phiên bản ổn định mới nhất của Matplotlib và NumPy. phiên bản Python của tôi là 2.7.3


GỖ


Đây là chỉ cảnh báo tôi nhận được từ giao diện điều khiển:

RuntimeWarning: giá trị không hợp lệ gặp phải trong phân chia cho n trong normals])


Bất kỳ trợ giúp nào được đánh giá cao.


EDIT

Với @Saullo Castro trả lời, đây là biểu đồ mới sản xuất: enter image description here

Hoặc, sử dụng mẫu thể hiện trong câu trả lời (xem khu vực được đánh dấu bằng chấm đỏ):

enter image description here

chỉ có vấn đề còn lại là mặt quầy bar trên đầu trang, nhưng đã được khá tốt. Nếu bất cứ ai có bất kỳ ý kiến ​​về điều này, cảm thấy tự do để giúp tôi.

Trả lời

4

Sử dụng tham số zsort='max' khi bạn gọi ax.bar3d() giải quyết vấn đề của bạn (xem here):

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

tôi đã sử dụng một phiên bản sửa đổi của mã từ this other question để chơi với vấn đề của bạn:

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

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.5, ypos+0.5) 

xpos = xpos.flatten() # Convert positions to 1D array 
ypos = ypos.flatten() 
zpos = np.ones(lx*ly)*1e-10 

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

ax.bar3d(xpos,ypos,zpos, dx, dy, dz, color='b', alpha=1., zsort='max') 
plt.ion() 
plt.show() 
+0

Cảm ơn , @SaulloCastro Sửa đổi này gần như hoàn hảo nhất. Z trật tự bây giờ là ok, ngoại trừ bởi các mặt hàng đầu thanh. Tôi sẽ đăng hình ảnh mới được tạo ra. –

+0

Rất vui khi nghe điều đó! Đăng và chúng ta có thể xem nó ... –

+0

Nó đã ở đó rồi. Nếu bạn có bất kỳ ý kiến, xin vui lòng, cảm thấy tự do để chỉnh sửa. Cảm ơn! –

Các vấn đề liên quan