天天看點

關于Python matplotlib scatter函數的一點認知

在吳恩達DeepLearning.ai課程1-3節中,有如下一段代碼:

X, Y = load_planar_dataset()

# Visualize the data:plt.scatter(X[, :], X[, :], c=Y, s=, 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就能編譯通過了。

顯示圖像如下:

關于Python matplotlib scatter函數的一點認知

此外,c這個參數,除了指派序列和cmap參數配合使用,還可以指派成各種顔色,如c='blue',顯示出來的點的顔色就是藍色,顯示圖像如下:

關于Python matplotlib scatter函數的一點認知

此外,可以通過修改cmap參數,可以根據顔色映射表顯示其他的顔色,如:cmap=plt.get_cmap('rainbow'),顯示如下:

關于Python matplotlib scatter函數的一點認知

也可以自定義:

from matplotlib import colors

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

顯示圖像為:

關于Python matplotlib scatter函數的一點認知

繼續閱讀