<p>错误信息是误导性的。您得到的值错误是因为<code>colors</code>的形状错误,而不是因为RGBA值无效。</p>
<p>为每个条着色时,应该是一个长度为<code>N</code>的数组,其中<code>N</code>是条数。既然有8281个酒吧</p>
<pre><code>In [121]: x_data.shape
Out[121]: (8281,)
</code></pre>
<p><code>colors</code>应该具有形状(8281,4)。但是,所发布的代码生成一个形状数组(91、91、4):</p>
<pre><code>In [123]: colors.shape
Out[123]: (91, 91, 4)
</code></pre>
<p>所以要解决这个问题,可以使用<code>color=colors.reshape(-1,4)</code>。</p>
<hr/>
<pre><code>import numpy as np
import matplotlib.colors as colors
import matplotlib.cm as cm
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
samples = np.random.randint(91,size=(5000,2))
F = np.zeros([91,91])
for s in samples:
F[s[0],s[1]] += 1
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x_data, y_data = np.meshgrid( np.arange(F.shape[1]),
np.arange(F.shape[0]) )
x_data = x_data.flatten()
y_data = y_data.flatten()
z_data = F.flatten()
dz = F
offset = dz + np.abs(dz.min())
fracs = offset.astype(float)/offset.max()
norm = colors.Normalize(fracs.min(), fracs.max())
colors = cm.jet(norm(fracs))
ax.bar3d(x_data,y_data,np.zeros(len(z_data)),1,1,z_data,color=colors.reshape(-1,4) )
plt.show()
</code></pre>
<p><a href="https://i.stack.imgur.com/i0viY.png" rel="noreferrer"><img src="https://i.stack.imgur.com/i0viY.png" alt="enter image description here"/></a></p>