python画折线图,曲线图

it2022-05-05  159

import matplotlib.pyplot as plt input_txt = 'New_Text_Document_pro.txt' f = open(input_txt) x = [] y = [] for line in f: line = line.strip('\n') line = line.split(' ') x.append('d' % int(line[0].split(':')[1])) # y.append(float(line[1].split(':')[1])) y.append(float(line[2].split('=')[1].replace('%', ''))) f.close plt.plot(x, y, marker='o', label='lost plot') plt.xticks(x[0:len(x):10], x[0:len(x):10], rotation=45) plt.margins(0) plt.xlabel("train step") # plt.ylabel("avg_loss") plt.ylabel("Accuracy") plt.title("matplotlip plot") plt.tick_params(axis="both") # plt.savefig("Epoch_Loss.jpg") plt.savefig("Epoch_Accuracy.jpg") plt.show() # 注意plt.savefig()要放在plt.show()之前,不然保存的图片是空白的

以下是整理封装好的折线图画法:

import matplotlib.pyplot as plt def x_y_data(txt_path): f = open(txt_path) content = f.readlines() x = [] y_loss = [] y_acc = [] for i in range(0, 10): line = content[i].strip('\n') line = content[i].split(' ') x.append('d' % int(line[0].split(':')[1])) y_loss.append(float(line[1].split(':')[1])) y_acc.append(float(line[2].split('=')[1].replace('%', ''))) f.close return x, y_loss, y_acc class make_picture(object): def __init__(self, tips): self.tips = tips def loss_pic(self, x, y_loss): plt.plot(x, y_loss, marker='o', label='lost plot') plt.xticks(x[0:len(x):10], x[0:len(x):10], rotation=45) plt.margins(0) plt.xlabel("Epoch") plt.ylabel("avg_loss") plt.title("matplotlip plot") plt.tick_params(axis="both") plt.savefig("Epoch_Loss.jpg") plt.show() print(self.tips) def acc_pic(self, x, y_acc): plt.plot(x, y_acc, marker='o', label='lost plot') plt.xticks(x[0:len(x):10], x[0:len(x):10], rotation=45) plt.margins(0) plt.xlabel("Epoch") plt.ylabel("Accuracy") plt.title("matplotlip plot") plt.tick_params(axis="both") plt.savefig("Epoch_Accuracy.jpg") plt.show() print(self.tips) def acc_pic2(self, x, y_acc): x_label = range(0, 201, 10) y_label = range(0, 101, 10) override = { 'fontsize': '13', 'verticalalignment': 'center', 'horizontalalignment': 'center',} # 'rotation' : 'vertical'} plt.plot(x, y_acc) #marker='o', label='lost plot' plt.xticks(x_label, rotation=45) plt.xlim(0, 210) #控制x的范围,可以让x,y零点重合 plt.yticks(y_label) #plt.margins(0) plt.xlabel("Epoch", override) plt.ylabel("Accuracy(%)") # plt.title("matplotlip plot") plt.tick_params(axis="both") plt.savefig("Epoch_Accuracy.jpg") plt.show() print(self.tips) if __name__ == '__main__': txt_path = 'New_Text_Document_pro.txt' tips = 'The picture has done!' x, y_loss, y_acc = x_y_data(txt_path) PIC = make_picture(tips) PIC.loss_pic(x, y_loss) PIC.acc_pic(x, y_acc)

以下是整理封装好的曲线图画法:

import matplotlib.pyplot as plt import numpy as np from scipy.interpolate import spline import json, time def test(): ################### a = [2,3,5,6,7] for i in a: num = np.sum(list(map(lambda x: x <= i, a))) # print(i, 'num: ', num) ################### for i in np.arange(0, 0.51, 0.05): num = '%.2f' % i # print(num) ################### b = np.array([1,2,3,4,5]) print('b lenth: ', len(b), b[0]) def percentage(txt_path, json_path): #得到y轴数据:数据的百分比 f = open(txt_path) # f_distance = open(distanse_txt_path, 'w') # f_per = open(per_txt_path, 'w') lines = f.readlines() distanse_list = [] for line in lines: # f_distance.write(line.split(',')[0]) distanse_list.append(float(line.split(',')[0])) distanse_array = np.array(distanse_list) # per_list = [] per_result = {} for i in np.arange(0, 0.51, 0.05): x_index = float('%.2f' % i) num = np.sum(list(map(lambda x: x <= x_index, distanse_list))) per = num/len(distanse_list) # f_per.write(per) # per_list.append(per) per_result[x_index] = per json_str = json.dumps(per_result) with open(json_path, 'w') as json_file: json_file.write(json_str) # per_array = np.array(per_list) # return distanse_array, per_array #绘制曲线图 def curve_pic(json_path, save_path): f = open(json_path) x_list = [] per_list = [] per_result = json.load(f) for k_x, v_per in per_result.items(): x_list.append(k_x) per_list.append(v_per) x_data = np.array(list(map(float, x_list))) y_data = np.array(list(map(float, per_list))) * 100 y_ticks = np.arange(0, 101, 10) xnew = np.linspace(x_data.min(),x_data.max(),300) #300 represents number of points to make between T.min and T.max power_smooth = spline(x_data,y_data,xnew) x_new_data = [] x_data = list(x_data) for i in range(len(x_data)): if i == 0: x_new_data.append(0) else: x_new_data.append(x_data[i]) plt.plot(xnew,power_smooth) plt.xticks(x_new_data[0:], x_new_data[0:]) plt.yticks(y_ticks[0:], y_ticks[0:]) plt.xlim(0, 0.5) plt.ylim(0, 100) plt.title('PCK total') plt.xlabel('Normalized distance') plt.ylabel('Detection rate(%)') plt.savefig(save_path) plt.show() def per_range(txt_path): f = open(txt_path) lines = f.readlines() distanse_list = [] for line in lines: distanse_list.append(float(line.split(',')[0])) num_1 = 0 num_2 = 0 num_3 = 0 num_4 = 0 num_5 = 0 for i in distanse_list: if i <= 0.1: num_1 += 1 if i <= 0.2: num_2 += 1 if i <= 0.3: num_3 += 1 if i <= 0.4: num_4 += 1 if i <= 0.5: num_5 += 1 total = len(distanse_list) per_1 = num_1 / total per_2 = num_2 / total per_3 = num_3 / total per_4 = num_4 / total per_5 = num_5 / total print('%.5f' % per_1) print('%.5f' % per_2) print('%.5f' % per_3) print('%.5f' % per_4) print('%.5f' % per_5) print(per_1+per_2+per_3+per_4+per_5) def per_15_range(txt_path): f = open(txt_path) lines = f.readlines() dict_1 = {} dict_2 = {} dict_3 = {} dict_4 = {} dict_5 = {} dict_15 = {} for index in range(0, 16): num = 0 num_1 = 0 num_2 = 0 num_3 = 0 num_4 = 0 num_5 = 0 for line in lines: rate = float(line.split(',')[0]) id = int(line.split(',')[1]) if id == index: num += 1 if rate <= 0.1: num_1 += 1 if rate <= 0.2: num_2 += 1 if rate <= 0.3: num_3 += 1 if rate <= 0.4: num_4 += 1 if rate <= 0.5: num_5 += 1 dict_15[index] = num dict_1[index] = num_1 dict_2[index] = num_2 dict_3[index] = num_3 dict_4[index] = num_4 dict_5[index] = num_5 per_1_dict = {} per_2_dict = {} per_3_dict = {} per_4_dict = {} per_5_dict = {} for k_index, v_number in dict_15.items(): per_1_dict[k_index] = dict_1[k_index] / v_number per_2_dict[k_index] = dict_2[k_index] / v_number per_3_dict[k_index] = dict_3[k_index] / v_number per_4_dict[k_index] = dict_4[k_index] / v_number per_5_dict[k_index] = dict_5[k_index] / v_number print('per_0.1: ', per_1_dict) print('per_0.2: ', per_2_dict) print('per_0.3: ', per_3_dict) print('per_0.4: ', per_4_dict) print('per_0.5: ', per_5_dict) def json_data(json_path): f = open(json_path) json_file = json.load(f) print(type(json_file)) print(len(json_file.keys())) print(len(json_file.values())) print(json_file.keys()) if __name__ == '__main__': txt_path = '/home/jianghusanren/Pictures/FX/4/pckh.txt' # pckh.txt # distanse_txt_path = '/home/jianghusanren/Pictures/FX/4/pckh_distanse.txt' # per_txt_path = '/home/jianghusanren/Pictures/FX/4/pckh_per.txt' pic_save_path = '/home/jianghusanren/Pictures/FX/4/PCK_total.jpg' json_path = '/home/jianghusanren/Pictures/FX/4/pckh_dis_per_2.json' statt = time.time() # test() # per_15_range(txt_path) # per_range(txt_path) # percentage(txt_path, json_path) # json_data(json_path) curve_pic(json_path, pic_save_path) end = time.time() # print(end - statt)

最新回复(0)