关于Python matplotlib scatter函数的一点认知

在吴恩达DeepLearning.ai课程1-3节中,有如下一段代码:

X, Y = load_planar_dataset()

# Visualize the data:plt.scatter(X[0, :], X[1, :], c=Y, s=40, cmap=plt.cm.Spectral);

我在运行过后,实际上会报错

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
C:\ProgramData\Anaconda3\lib\site-packages\matplotlib\colors.py in to_rgba(c, alpha)
    131     try:
--> 132         rgba = _colors_full_map.cache[c, alpha]
    133     except (KeyError, TypeError):  # Not in cache, or unhashable.

TypeError: unhashable type: 'numpy.ndarray'

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)

.

.

.

3991                 raise ValueError(msg.format(c.shape, x.size, y.size))
   3992         else:
   3993             colors = None  # use cmap, norm after collection is created

ValueError: c of shape (1, 400) not acceptable as a color sequence for x with size 400, y with size 400


最后一行错误日志说明参数c的shape和x,y的shape不一致,而我在输入时x = X[0,:], y = X[1,:],c = Y,最初我觉得它们的大小

都是400(因为load_planar_dataset()函数生成的就是400个样本集),所以不应该报错,后来我又仔细读了一下报错信息,结合前两天

在1-2课程中学到的知识,意识到(400,)和(1,400)是两个完全不同的类型,(400,)是秩为1的数组,(1,400)是一个二维数组,它们是

不匹配的,解决这个问题,可以有几种方法:

1、将c=Y改为c=np.squeeze(Y),np.squeeze(Y)会把Y的shape从(1, 400)变成了(400,)

2、将c=Y改为c=Y[0,:],效果同上

3、将X[0, :], X[1, :]改成X[0, :].reshape(1, -1), X[1, :].reshape(1, -1),这种更复杂,仅作验证用,改成之后可以发现这时c=Y就能编译通过了。

显示图像如下:


此外,c这个参数,除了赋值序列和cmap参数配合使用,还可以赋值成各种颜色,如c='blue',显示出来的点的颜色就是蓝色,显示图像如下:


此外,可以通过修改cmap参数,可以根据颜色映射表显示其他的颜色,如:cmap=plt.get_cmap('rainbow'),显示如下:


也可以自定义:

from matplotlib import colors

cmap=colors.ListedColormap(['g','r'])

显示图像为:


猜你喜欢

转载自blog.csdn.net/lq200321012/article/details/80372411
今日推荐