我們使用基於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多些幾個鍵值對就行。