python - 值错误 : Invalid RGBA argument: What is causing this error?

标签 python matplotlib rgba

我正在尝试使用以下想法创建 3D 彩色条形图:this stackoverflow post .

首先,我使用以下代码创建一个 3D 条形图:

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

ax.bar3d(x_data,y_data,np.zeros(len(z_data)),1,1,z_data )
plt.show()

输出如下:

enter image description here

现在我尝试使用代码 verbatim 为条形图着色:this stackoverflow post .这是代码:

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

# colors = np.random.rand(91,91,4)

ax.bar3d(x_data,y_data,np.zeros(len(z_data)),1,1,z_data,color=colors )
plt.show()

但是我得到:ValueError: Invalid RGBA argument:

现在我无法调试 Invalid RGBA argument 因为我不明白是什么导致了错误。我什至尝试使用随机颜色来代替 colors = np.random.rand(91,91,4),但错误仍然存​​在。

我检查了关于 Invalid RGBA argument 的 stackoverflow 帖子(例如 thisthisthisthis ),但似乎没有一个能回答我的问题。

我想知道是什么导致了这个错误。我在 Ubuntu Mate 16 上为 python 使用标准的 Anaconda 发行版。

会不会是由于python最近的更新,解决方案如the original stackoverflow post过时了?

最佳答案

错误信息具有误导性。您收到 ValueError 是因为 colors 的形状错误,而不是因为 RGBA 值无效。

当用单一颜色为每个条着色时,color 应该是一个长度为 N 的数组,其中 N 是条的数量。由于有 8281 条,

In [121]: x_data.shape
Out[121]: (8281,)

colors 的形状应该是 (8281, 4)。但是,发布的代码生成了一个形状数组 (91, 91, 4):

In [123]: colors.shape
Out[123]: (91, 91, 4)

因此,要解决此问题,请使用 color=colors.reshape(-1,4)


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

enter image description here

关于python - 值错误 : Invalid RGBA argument: What is causing this error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53531429/

相关文章:

c++ - 从ARGB转换为RGBA

c++ - 在 C++ 中创建 RGBA 图像

python - Twisted 和 pyapns 的推送通知错误

python - 将单个 python .py 文件分解为多个具有相互依赖性的文件

python - matplotlib 动画期间的异常

python - Error #15 : Initializing libiomp5. dylib,但发现 libiomp5.dylib 已经初始化

html - 渐变背景上不透明边框的交换颜色

python - 如何在 Keras 中实现三元组损失?

python - 从另一个线程关闭 Python BasicHTTPServer

python-2.7 - 使用 basemap 在 map 上绘制轨迹