scatter的用法 随机颜色_plt.scatter画分类月亮湾散点图
這幾天碰到一個需求,需要畫出分類面以及區分不同分類點的形狀和顏色,發現scatter并不能同時支持及區分形狀和顏色,自我發現一種實現放式,以此分享。
ps:關于此方法的基本參數解析請查閱官網介紹。此文章只介紹此方法的【特殊用法】和【變異用法】
一、生成一組畫圖數據
本來此數據來源應該為算法數據集以及預測值,為方便,假設數據集為一組月亮數據集
X月亮散點圖二、根據預測值y分類進行顏色區分
# 將y設置為顏色參數,s為點的大小,cmap=plt.cm.Spectral按y分類分配點的顏色 # 這里的y只有二分類,所以只有兩種顏色 # 如果你的y是多分類的值,那么會匹配出多種顏色的點 plt.scatter(X[:, 0], X[:, 1], c=y, s=40, cmap=plt.cm.Spectral) plt.show()二分類散點圖三、同時區分顏色和形狀
從上述的例子不難看出,已經很好將數據集進行顏色分類,但是我想將紅色的點設置為圓形,藍色的點設置成三角形,那么此時plt.scatter就很難直接支持這樣的操作了。
我們需要將指定形狀的參數marker做一下調整
顯出效果圖,然后再來分析實現原理
同時區分顏色和形狀的月亮散點圖def mscatter(x, y, m, c, **kw):"""畫不同形狀的圖:param x: 數據x,x[:,0]:param y: 數據y, x[:,1]:param m: 形狀分類:param c: 預測值y,用來分類顏色:param kw: 其它參數:return:"""import matplotlib.markers as mmarkersax = plt.gca()sc = ax.scatter(x, y, c=c, **kw)m = list(map(lambda x: m[x], c))if (m is not None) and (len(m) == len(x)):paths = []for marker in m:if isinstance(marker, mmarkers.MarkerStyle):marker_obj = markerelse:marker_obj = mmarkers.MarkerStyle(marker)path = marker_obj.get_path().transformed(marker_obj.get_transform())paths.append(path)sc.set_paths(paths)return scm = {0: 'o', 1: '^'} # 枚舉所有分類想要的形狀 mscatter(X[:, 0], X[:, 1], m=m, c=y, s=40, cmap=plt.cm.Spectral) plt.show()上面代碼的邏輯,是將y中的分類適用形狀進行了一一替換,然后將每一種形狀進行注冊,這樣就能將每一個點個性化了。如果需要對多分類輸出進行多形狀標注,只需要按照m中的格式進行調整就行,如果需要對所有的點進行獨特的設置,那就需要修改一下 list(map(lambda x: m[x], c)) 中函數的邏輯處理功能,可以讓你的分類圖達到任何想要的效果。
四、每一種分類中又包含【有標簽樣本】和【無標簽樣本】
有時候算法的數據集中含有 有標簽樣本 和 無標簽樣本,需要對這兩類樣本進行形狀區分
則需要先把數據集進行分類,然后分開畫在一張圖上即可
下面的圖的數據來源是我自己分類算法出來的數據集,圖中藍色部分和紅色部分都分別含有三角形和圓形的點,這里三角形代表的是有標簽樣本,圓形代表的是無標簽樣本。
五、最后,如果想把每個分類添加上區域背景色,那就將此區域的點按照比較小的粒度進行顏色區分就好
def總結
以上是生活随笔為你收集整理的scatter的用法 随机颜色_plt.scatter画分类月亮湾散点图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python网址在浏览器能打开_Pyth
- 下一篇: zabbix cpu核数 windows