python3中matplotlab画散点图

279 阅读1分钟
#/usr/bin/python3
# -*- encoding: utf-8 -*-

import ast
from math import sqrt
import matplotlib.pyplot as plt


json_file_path01 = r'output_data.txt'
json_file_path02 = r'output_nodata.txt'

list_x,list_y = [],[]
def read_json(file_path,flag):
    with open(file_path,'r',encoding='utf-8') as f:
        for data in f.readlines():
            #将str转化为dict
            dict_data = ast.literal_eval(data)
            s_error = abs(dict_data.get("s_error"))
            s_sim = dict_data.get("s_sim")
            s_exp = dict_data.get("s_exp")
            error_x = abs(dict_data.get("error_x"))
            error_y = abs(dict_data.get("error_y"))
            if flag == 'data':
                #分别获取点的x,y坐标
                output_data_x = s_error/max(s_sim,s_exp)
                output_data_y =  sqrt(error_x**2+error_y**2)/max(s_sim,s_exp)
            elif flag == 'nodata':
                output_data_x = error_x/max(s_sim,s_exp)
                output_data_y = error_y/max(s_sim,s_exp)

            # yield (output_data_x,output_data_y,)
            list_x.append(output_data_x)
            list_y.append(output_data_y)

plt.figure(figsize=(15,9),dpi=80)
#设定x,y轴的区间
plt.xlim(-0.5,1.5)
plt.ylim(-0.5,1.5)
plt.title("output_data and output_nodata",fontsize=13) 
plt.xlabel('X',fontsize=12)  
plt.ylabel('Y',fontsize=12) 

# #画图output_data坐标点
# dots = read_json(json_file_path01,'data')
# for dot in dots:
#     # 显示坐标点
#     plt.scatter(dot[0],dot[1],c = 'r',marker='.')

# #画图output_nodata坐标点
# dots = read_json(json_file_path02,'nodata')
# for dot in dots:
#     # 显示坐标点
#     plt.scatter(dot[0],dot[1],c = 'g',marker='v')
# plt.legend(['data','nodata'])

read_json(json_file_path01,'data')
plt.scatter(list_x,list_y,c = 'r',marker='.')
list_x.clear()
list_y.clear()
read_json(json_file_path02,'nodata')
plt.scatter(list_x,list_y,c = 'g',marker='v')
#设置图例
plt.legend(['data','nodata'])
#设置图片保存路径
plt.savefig(r'C:\\output\\data.jpg')
plt.show()

data.jpg