You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

164 lines
6.4 KiB
Python

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/usr/bin/env python
from datetime import datetime
from traffic_csv_converter import *
import cv2
"""
sessions_plotter.py has 3 functions to create spectogram, histogram, 2d_histogram from [(ts, size),..] session.
sessions_plotter.py 具有 3 个功能,可从 [ts size,..] 会话创建频谱图、直方图2d_histogram。
"""
import os
import matplotlib
import cv2 as cv
matplotlib.use('agg')
import matplotlib.pyplot as plt
import numpy as np
import datetime,time
MTU = 1500
def session_spectogram(ts, sizes, name=None):
plt.scatter(ts, sizes, marker='.')
plt.ylim(0, MTU)#设置y轴坐标区间
#plt.ylim(MTU, MTU2) # 设置y轴坐标区间
plt.xlim(ts[0], ts[-1])#设置x轴坐标区间
# plt.yticks(np.arange(0, MTU, 10))
# plt.xticks(np.arange(int(ts[0]), int(ts[-1]), 10))
plt.title(name + " Session Spectogram")#输出表头
plt.ylabel('Size [B]')
plt.xlabel('Time [sec]')
plt.grid(True)#显示网格线 1=True=默认显示0=False=不显示
plt.show()
def session_atricle_spectogram(ts, sizes, fpath=None, show=True, tps=None):
if tps is None:
max_delta_time = ts[-1] - ts[0]
else:
max_delta_time = tps
ts_norm = ((np.array(ts) - ts[0]) / max_delta_time) * MTU
plt.figure()
plt.scatter(ts_norm, sizes, marker=',', c='k', s=5)
plt.ylim(0, MTU)
plt.xlim(0, MTU)
plt.ylabel('Packet Size [B]')
plt.xlabel('Normalized Arrival Time')
plt.set_cmap('binary')#如果将当前图窗比作一幅简笔画则cmap就代表颜料盘的配色用所提供的颜料盘自动给当前简笔画上色就是cmap所做的事。
#plt.set_cmap('cool')
plt.axes().set_aspect('equal')#设置轴缩放的方面即y-unit与x-unit的比率
plt.grid(False)#显示网格线 1=True=默认显示0=False=不显示
if fpath is not None:
# plt.savefig(OUTPUT_DIR + fname, bbox_inches='tight', pad_inches=1)
plt.savefig(fpath, bbox_inches='tight')
#第一个实参指定要以什么样的文件名保存图表。
#第二个实参指定将图表多余的空白区域裁减掉。如果要保留图表周围多余的空白区域,可省略这个实参。
if show:
plt.show()
plt.close()
def session_histogram(sizes, plot=False):
hist, bin_edges = np.histogram(sizes, bins=range(0, MTU + 1, 1))
#sizes数组bins表示的是范围即直方图纵坐标最大值(0,MTU + 1)表示只统计[0MTU]不包括0
if plot:
plt.bar(bin_edges[:-1], hist, width=1)#hist直方图width单个直方图的宽度
plt.xlim(min(bin_edges), max(bin_edges)+100)
plt.show()
return hist.astype(np.uint16)#转换数据类型为np.uint16
def session_2d_histogram(ts, sizes, plot=False, tps=None, qwe=0):#plot=False不画出图例
if tps is None:
max_delta_time = ts[-1] - ts[0]
else:
max_delta_time = tps
# ts_norm = map(int, ((np.array(ts) - ts[0]) / max_delta_time) * MTU)
ts_norm = ((np.array(ts) - ts[0]) / max_delta_time) * MTU
H, xedges, yedges = np.histogram2d(sizes, ts_norm, bins=(range(0, MTU + 1, 1), range(0, MTU + 1, 1)))
if plot:
plt.pcolormesh(xedges, yedges, H)#pcolormeshp()函数用于创建具有非规则矩形网格的伪彩色图
#plt.colorbar()#colorbar 即主图旁一个长条状的小图,能够辅助表示主图中 colormap 的颜色组成和颜色与数值的对应关系
plt.scatter(ts_norm, sizes, marker=',', s=1)
plt.xlim(0, MTU)
plt.ylim(0, MTU)
# 326
plt.ylabel('Packet Size [B]')
plt.xlabel('Normalized Arrival Time')
# plt.set_cmap('gnuplot')
plt.set_cmap('BuPu')
# plt.set_cmap('Greys')
plt.axis('off')
qwe=str(qwe)
figure_save_path = "appp111" # 这里创建了一个文件夹如果依次创建不同文件夹可以用name_list[i]
# figure_save_path2 = "appp08" # 这里创建了一个文件夹如果依次创建不同文件夹可以用name_list[i]
if not os.path.exists(figure_save_path):
os.makedirs(figure_save_path) # 如果不存在目录figure_save_path则创建
# if not os.path.exists(figure_save_path2):
# os.makedirs(figure_save_path2) # 如果不存在目录figure_save_path则创建
plt.savefig(os.path.join(figure_save_path, qwe+ ".png"),bbox_inches='tight',pad_inches = 0) # 分别命名图片
# # cv2.imwrite(filename, img)
# img = cv2.imread(s)
# cv2.imwrite(img, figure_save_path2, qwe+ ".png")
#
#
# #plt.savefig("filename" +qwe+ ".png")
plt.close()
plt.show()
# plt.axis('off')
#
# plt.show()
# plt.savefig(os.path.join(figure_save_path2, qwe + ".png")) # 分别命名图片
return H.astype(np.uint16)#转换数据类型为np.uint16
# def session_2d_histogram1(ts, sizes, plot=False, tps=None, qwe=0):#plot=False不画出图例
# if tps is None:
# max_delta_time = ts[-1] - ts[0]
# else:
# max_delta_time = tps
#
# # ts_norm = map(int, ((np.array(ts) - ts[0]) / max_delta_time) * MTU)
# ts_norm = ((np.array(ts) - ts[0]) / max_delta_time) * MTU
# H, xedges, yedges = np.histogram2d(sizes, ts_norm, bins=(range(0, MTU + 1, 1), range(0, MTU + 1, 1)))
# if plot:
# plt.pcolormesh(xedges, yedges, H)#pcolormeshp()函数用于创建具有非规则矩形网格的伪彩色图
# #plt.colorbar()#colorbar 即主图旁一个长条状的小图,能够辅助表示主图中 colormap 的颜色组成和颜色与数值的对应关系
# plt.scatter(ts_norm, sizes, marker=',', s=0.5)
# plt.xlim(0, MTU)
# plt.ylim(0, MTU)
# plt.ylabel('Packet Size [B]')
# plt.xlabel('Normalized Arrival Time')
# #plt.set_cmap('gnuplot')
# plt.set_cmap('BuPu')
# qwe=str(qwe)
#
# figure_save_path = "fig_voip_vpn1" # 这里创建了一个文件夹如果依次创建不同文件夹可以用name_list[i]
# if not os.path.exists(figure_save_path):
# os.makedirs(figure_save_path) # 如果不存在目录figure_save_path则创建
# plt.savefig(os.path.join(figure_save_path, qwe+ ".png")) # 分别命名图片
# plt.close()
# #plt.savefig("filename" +qwe+ ".png")
# plt.show()
# return H.astype(np.uint16)#转换数据类型为np.uint16