ValueError: RGBA values should be within 0-1 range when plotting scatter plot
ValueError: RGBA values should be within 0-1 range when plotting scatter plot
我正在尝试生成散点图以显示 PCA 变换前后的数据,类似于此 tutorial。
为此,我运行代码如下:
fig, axes = plt.subplots(1,2)
axes[0].scatter(X.iloc[:,0], X.iloc[:,1], c=y)
axes[0].set_xlabel('x1')
axes[0].set_ylabel('x2')
axes[0].set_title('Before PCA')
axes[1].scatter(X_new[:,0], X_new[:,1], c=y)
axes[1].set_xlabel('PC1')
axes[1].set_ylabel('PC2')
axes[1].set_title('After PCA')
plt.show()
导致出现此错误的原因:
ValueError: RGBA values should be within 0-1 range
X为预处理后的特征矩阵,包含196个样本,59个特征。而 y 是因变量,包含两个 类 [0, 1].
这是完整的错误消息:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-109-2c4f74ddce3f> in <module>
1 fig, axes = plt.subplots(1,2)
----> 2 axes[0].scatter(X.iloc[:,0], X.iloc[:,1], c=y)
3 axes[0].set_xlabel('x1')
4 axes[0].set_ylabel('x2')
5 axes[0].set_title('Before PCA')
~/anaconda3/lib/python3.7/site-packages/matplotlib/__init__.py in inner(ax, data, *args, **kwargs)
1597 def inner(ax, *args, data=None, **kwargs):
1598 if data is None:
-> 1599 return func(ax, *map(sanitize_sequence, args), **kwargs)
1600
1601 bound = new_sig.bind(ax, *args, **kwargs)
~/anaconda3/lib/python3.7/site-packages/matplotlib/axes/_axes.py in scatter(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, plotnonfinite, **kwargs)
4495 offsets=offsets,
4496 transOffset=kwargs.pop('transform', self.transData),
-> 4497 alpha=alpha
4498 )
4499 collection.set_transform(mtransforms.IdentityTransform())
~/anaconda3/lib/python3.7/site-packages/matplotlib/collections.py in __init__(self, paths, sizes, **kwargs)
881 """
882
--> 883 Collection.__init__(self, **kwargs)
884 self.set_paths(paths)
885 self.set_sizes(sizes)
~/anaconda3/lib/python3.7/site-packages/matplotlib/collections.py in __init__(self, edgecolors, facecolors, linewidths, linestyles, capstyle, joinstyle, antialiaseds, offsets, transOffset, norm, cmap, pickradius, hatch, urls, offset_position, zorder, **kwargs)
125
126 self._hatch_color = mcolors.to_rgba(mpl.rcParams['hatch.color'])
--> 127 self.set_facecolor(facecolors)
128 self.set_edgecolor(edgecolors)
129 self.set_linewidth(linewidths)
~/anaconda3/lib/python3.7/site-packages/matplotlib/collections.py in set_facecolor(self, c)
676 """
677 self._original_facecolor = c
--> 678 self._set_facecolor(c)
679
680 def get_facecolor(self):
~/anaconda3/lib/python3.7/site-packages/matplotlib/collections.py in _set_facecolor(self, c)
659 except AttributeError:
660 pass
--> 661 self._facecolors = mcolors.to_rgba_array(c, self._alpha)
662 self.stale = True
663
~/anaconda3/lib/python3.7/site-packages/matplotlib/colors.py in to_rgba_array(c, alpha)
277 result[mask] = 0
278 if np.any((result < 0) | (result > 1)):
--> 279 raise ValueError("RGBA values should be within 0-1 range")
280 return result
281 # Handle single values.
ValueError: RGBA values should be within 0-1 range
我不确定是什么导致了这个错误,希望能帮助解决这个问题。谢谢!
ax.scatter
的c=
参数可以有几种方式给出:
- 要使用 cmap 和 norm 映射到颜色的标量或 n 个数字序列。所以一个数字,或者一个 list-like 一维数字序列。
- 一个二维数组,其中的行是 RGB 或 RGBA。例如。类似于
[[1,0,0], [0,0,1]]
。所有这些值都必须在 0 和 1 之间。此外,每个条目应该有 3 个(对于 RGB)或 4 个(对于 RGBA)值。
- 长度为 n 的颜色序列。例如。
["red", "#B789C0", "turquoise"]
- 单一颜色格式字符串。例如。
"cornflowerblue"
.
现在,当给出一个数字数组时,为了能够区分第一种情况和第二种情况,matplotlib 只查看数组维度。如果是 1D,matplotlib 假设第一种情况。对于 2D,它假设第二种情况。请注意,Nx1
或 1xN
数组也被视为二维数组。您可以使用 np.squeeze()
来“挤出”虚拟第二维。
我正在尝试生成散点图以显示 PCA 变换前后的数据,类似于此 tutorial。
为此,我运行代码如下:
fig, axes = plt.subplots(1,2)
axes[0].scatter(X.iloc[:,0], X.iloc[:,1], c=y)
axes[0].set_xlabel('x1')
axes[0].set_ylabel('x2')
axes[0].set_title('Before PCA')
axes[1].scatter(X_new[:,0], X_new[:,1], c=y)
axes[1].set_xlabel('PC1')
axes[1].set_ylabel('PC2')
axes[1].set_title('After PCA')
plt.show()
导致出现此错误的原因:
ValueError: RGBA values should be within 0-1 range
X为预处理后的特征矩阵,包含196个样本,59个特征。而 y 是因变量,包含两个 类 [0, 1].
这是完整的错误消息:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-109-2c4f74ddce3f> in <module>
1 fig, axes = plt.subplots(1,2)
----> 2 axes[0].scatter(X.iloc[:,0], X.iloc[:,1], c=y)
3 axes[0].set_xlabel('x1')
4 axes[0].set_ylabel('x2')
5 axes[0].set_title('Before PCA')
~/anaconda3/lib/python3.7/site-packages/matplotlib/__init__.py in inner(ax, data, *args, **kwargs)
1597 def inner(ax, *args, data=None, **kwargs):
1598 if data is None:
-> 1599 return func(ax, *map(sanitize_sequence, args), **kwargs)
1600
1601 bound = new_sig.bind(ax, *args, **kwargs)
~/anaconda3/lib/python3.7/site-packages/matplotlib/axes/_axes.py in scatter(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, plotnonfinite, **kwargs)
4495 offsets=offsets,
4496 transOffset=kwargs.pop('transform', self.transData),
-> 4497 alpha=alpha
4498 )
4499 collection.set_transform(mtransforms.IdentityTransform())
~/anaconda3/lib/python3.7/site-packages/matplotlib/collections.py in __init__(self, paths, sizes, **kwargs)
881 """
882
--> 883 Collection.__init__(self, **kwargs)
884 self.set_paths(paths)
885 self.set_sizes(sizes)
~/anaconda3/lib/python3.7/site-packages/matplotlib/collections.py in __init__(self, edgecolors, facecolors, linewidths, linestyles, capstyle, joinstyle, antialiaseds, offsets, transOffset, norm, cmap, pickradius, hatch, urls, offset_position, zorder, **kwargs)
125
126 self._hatch_color = mcolors.to_rgba(mpl.rcParams['hatch.color'])
--> 127 self.set_facecolor(facecolors)
128 self.set_edgecolor(edgecolors)
129 self.set_linewidth(linewidths)
~/anaconda3/lib/python3.7/site-packages/matplotlib/collections.py in set_facecolor(self, c)
676 """
677 self._original_facecolor = c
--> 678 self._set_facecolor(c)
679
680 def get_facecolor(self):
~/anaconda3/lib/python3.7/site-packages/matplotlib/collections.py in _set_facecolor(self, c)
659 except AttributeError:
660 pass
--> 661 self._facecolors = mcolors.to_rgba_array(c, self._alpha)
662 self.stale = True
663
~/anaconda3/lib/python3.7/site-packages/matplotlib/colors.py in to_rgba_array(c, alpha)
277 result[mask] = 0
278 if np.any((result < 0) | (result > 1)):
--> 279 raise ValueError("RGBA values should be within 0-1 range")
280 return result
281 # Handle single values.
ValueError: RGBA values should be within 0-1 range
我不确定是什么导致了这个错误,希望能帮助解决这个问题。谢谢!
ax.scatter
的c=
参数可以有几种方式给出:
- 要使用 cmap 和 norm 映射到颜色的标量或 n 个数字序列。所以一个数字,或者一个 list-like 一维数字序列。
- 一个二维数组,其中的行是 RGB 或 RGBA。例如。类似于
[[1,0,0], [0,0,1]]
。所有这些值都必须在 0 和 1 之间。此外,每个条目应该有 3 个(对于 RGB)或 4 个(对于 RGBA)值。 - 长度为 n 的颜色序列。例如。
["red", "#B789C0", "turquoise"]
- 单一颜色格式字符串。例如。
"cornflowerblue"
.
现在,当给出一个数字数组时,为了能够区分第一种情况和第二种情况,matplotlib 只查看数组维度。如果是 1D,matplotlib 假设第一种情况。对于 2D,它假设第二种情况。请注意,Nx1
或 1xN
数组也被视为二维数组。您可以使用 np.squeeze()
来“挤出”虚拟第二维。