利用matplotlib繪製二分類(多分類)散點圖

我們使用基於python的第三方工具包matplotlib進行二分類散點圖繪製。

代碼:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['font.serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示爲方塊的問題,或者轉換負號爲字符串

nums, label = [], []


def mscatter(x, y, ax=None, m=None, **kw):  # 方法重寫
    import matplotlib.markers as mmarkers
    if not ax: ax = plt.gca()
    sc = ax.scatter(x, y, **kw)
    if (m is not None) and (len(m) == len(x)):
        paths = []
        for marker in m:
            if isinstance(marker, mmarkers.MarkerStyle):
                marker_obj = marker
            else:
                marker_obj = mmarkers.MarkerStyle(marker)
            path = marker_obj.get_path().transformed(
                marker_obj.get_transform())
            paths.append(path)
        sc.set_paths(paths)
    return sc


with open("similarity_cbow.txt", "r", encoding="utf-8") as f:  # 數據文件
    for line in f.readlines():
        nums.append(float(line))


for item in nums:    
    if item > 0.75:  # 數值大於0.75爲一類,小於等於爲另一類
        label.append(1)
    else:
        label.append(0)

nums_map = {1: 'b', 0: 'r'}   #  數值大於0.75的一類標藍色,另一類標紅色
cm = list(map(lambda x: nums_map[x], nums_map))

print(cm)
fig, ax = plt.subplots()
# 參數c爲分類標籤,range(len(nums))爲x軸數值,nums爲y軸數值,m爲數值的顏色映射,cmap爲色彩盤
p1 = mscatter(range(len(nums)), nums, c=label, m=nums_map, ax=ax, cmap=plt.cm.RdYlBu)
plt.title(u"測試集語義相似度")
plt.xlabel(u"測試集序列")
plt.ylabel(u"相似度")
# plt.savefig("cbow牛逼模型.png")
plt.show()

其中,代碼中的數據文件即多行數值的txt文件

 

 

效果圖如下圖所示(大於閾值的數據標藍色,小於的標紅色):

 

當然,代碼也可以用於多分類繪圖,只需要多加幾個判斷,在label裏多append幾種數值,nums_map多些幾個鍵值對就行。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章