利用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多些几个键值对就行。 

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