Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python bar3d绘图中的错误重叠_Python_Matplotlib_3d - Fatal编程技术网

Python bar3d绘图中的错误重叠

Python bar3d绘图中的错误重叠,python,matplotlib,3d,Python,Matplotlib,3d,我已经绘制了这个3d条形图,但是我在一些条形图中发现了错误的重叠,如下图中绿色圆圈所示: 该图由以下人员绘制: import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d.axes3d import Axes3D import matplotlib.colors as colors fig = plt.figure(figsize=(10,8)) ax = fig.add_subplot(111, p

我已经绘制了这个3d条形图,但是我在一些条形图中发现了错误的重叠,如下图中绿色圆圈所示:

该图由以下人员绘制:

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

fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(111, projection='3d')    
matrix = np.array([
[84 80 68 56 60 44 55 39 27 29]
[82 67 63 44 47 33 22 19  9  2]
[53 61 48 34  0 16  0  0  0  0]
[48 25  0  0  0  0  0  0  0  0]])

len_x, len_y = matrix.shape
_x = np.arange(len_x)
_y = np.arange(len_y)

xpos, ypos = np.meshgrid(_x, _y)
xpos = xpos.flatten('F')
ypos = ypos.flatten('F')
zpos = np.zeros_like(xpos)

dx = np.ones_like(zpos)
dy = dx.copy()
dz = matrix.flatten()

cmap=plt.cm.magma(plt.Normalize(0,100)(dz))

ax.bar3d(xpos+0.32, ypos-0.3, zpos, dx-0.6, dy-0.1, dz, zsort='max', color=cmap)

ax.set_xlabel('x')
ax.set_xticks(np.arange(len_x+1))
ax.set_xticklabels(['1000','500','100','50','0'])
ax.set_xlim(0,4)
ax.set_ylabel('y')
ax.set_yticks(np.arange(len_y+1))
ax.set_yticklabels(['0.5','1.','1.5','2.','2.5','3.','3.5','4.','4.5','5.'])
ax.set_ylim(-0.5,10)
ax.set_zlabel('z')
ax.set_zlim(0,100)
ax.view_init(ax.elev, ax.azim+100)
是虫子吗?为什么有些栏重叠得很厉害?
我使用的是matplotlib版本2.1.0和anaconda python 3.6.3,正如@DavidG在评论中指出的,这是一个没有理想解决方案的问题:

我的3D绘图在某些视角下看起来不正确
这可能是mplot3d最常见的问题。问题是 从某些视角来看,3D对象会出现在屏幕的前面 另一个物体,即使它在后面。这个可以 导致绘图看起来“物理上不正确”

不幸的是,虽然正在做一些工作来减少这种情况的发生 对于这一人工制品,它目前是一个棘手的问题,无法解决 直到matplotlib在其初始阶段支持三维图形渲染,才能完全解决此问题 核心。
[]

然而,我能够通过调整绘图的视角和减少条之间的接触面积来大大减少这个问题

例如,要更改视角(“摄影机位置”),我使用:

ax.view_init(elev=30,azim=-60)#更改仰角和方位角
详情请参阅


根据接触面积,这取决于您的绘图。在我的例子中,所有的条都沿y轴接触,所以我只是稍微减小了
dy
参数,以便在条之间留出一些间隙。

这可能是相关的-因此这是一个没有解决方案的问题…似乎可能会解决它,可能会使用matplotlib 3.5发布它?