Matplotlib - 三维错误法线酒吧情节(Matplotlib - Wrong normal

2019-09-01 14:02发布

问题


当使用matplotlib和图表上绘制3D吧我的一些酒吧的面孔得到了错误的法线值。



当我绘制高浓度区间图,以240杆,我得到这样的结果:

见,某些酒吧一些面孔是错了吗? 酒吧Z顺序获取不当也。


关于


我使用Matplotlib和numpy的最新稳定版本。 我的Python版本是2.7.3


日志


这是唯一的警告,我从控制台中看到:

RuntimeWarning:在鸿沟遇到n的法线无效值])


任何帮助深表感谢。


编辑

随着@Saullo卡斯特罗答案,这是产生新的图:

或者,使用在回答提出的样品(见标有红点的区域):

剩下唯一的问题是在顶部栏的脸,但已经是相当不错的。 如果有人对此有任何意见,可随时帮助我。

Answer 1:

使用参数zsort='max'当你调用ax.bar3d()解决您的问题(见这里 ):

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

我使用的代码的修改版本,从这个其他问题,您的问题发挥:

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()


文章来源: Matplotlib - Wrong normals on 3D bars plot