add graph

This commit is contained in:
Ta-Shun Su
2019-08-10 13:20:39 +08:00
parent 2ff06e2142
commit 68fcbd56f6
+54 -3
View File
@@ -36,7 +36,7 @@ method to coped with the corresponding problem:
import os.path
import sys
from collections import Counter
from typing import List, Optional, Dict, Set, Any
from typing import List, Optional, Dict, Set, Any, Union
class Options:
@@ -44,11 +44,14 @@ class Options:
self.skip = False
self.round = 2
self.overflow_pow = 10
self.graph: Union[bool, str] = False
self.graph_log_scale = False
class Result:
def __init__(self, options: Options):
def __init__(self, data_file: str, options: Options):
# data file information
self.data_file = data_file
self.date_time: Optional[str] = None
self.device_name: Optional[str] = None
self.device_address: Optional[str] = None
@@ -108,7 +111,7 @@ def calculate(txt_file: str, options: Options) -> Result:
if not os.path.exists(txt_file):
raise FileNotFoundError(txt_file)
result = Result(options)
result = Result(txt_file, options)
parsing_state = 0
@@ -191,6 +194,7 @@ def print_result(result: Result, options: Options):
for k in sorted(counter.keys()):
print(f % (k, counter[k]))
print(result.data_file)
print('data_count', result.data_count)
print('channel', ' '.join(list(map(str, sorted(result.channel)))))
@@ -207,6 +211,36 @@ def print_result(result: Result, options: Options):
print('value_delta')
print_table(result.value_delta_counter)
print()
def paint_result(result: Result, options: Options):
import matplotlib.pyplot as plt
fig, (at, av) = plt.subplots(2, 1)
time_delta_data = list(result.time_delta_counter)
expect_time_delta = 1000 / result.sample_rate
time_delta_bins = int((max(time_delta_data) - min(time_delta_data)) / expect_time_delta)
time_delta_weight = [result.time_delta_counter[k] for k in time_delta_data]
at.hist(time_delta_data,
bins=time_delta_bins,
weights=time_delta_weight,
log=options.graph_log_scale,
align='left')
value_delta_data = list(result.value_delta_counter)
value_delta_bins = max(value_delta_data) - min(value_delta_data)
value_delta_weight = [result.value_delta_counter[k] for k in value_delta_data]
av.hist(value_delta_data,
bins=value_delta_bins,
weights=value_delta_weight,
log=options.graph_log_scale,
align='left')
fig.tight_layout()
plt.show()
def print_help():
prg = sys.argv[0]
@@ -218,6 +252,8 @@ def print_help():
print(' --skip : skip if FILE not found')
print(' --round VALUE : floating number round')
print(' --overflow VALUE : overflow number. 2^VALUE')
print(' --graph[=FILE] : use matplotlib to generate graph')
print(' --graph-log-scale :')
print()
print('ARGUMENTS:')
print(' FILE : txt data file')
@@ -270,6 +306,18 @@ def main(argv: List[str]):
o.overflow_pow = int(arg[len('--overflow='):])
i += 1
elif arg == '--graph':
o.graph = True
i += 1
elif arg.startswith('--graph='):
o.graph = arg[len('--graph='):]
i += 1
elif arg == '--graph-log-scale':
o.graph_log_scale = True
i += 1
elif arg.startswith('-'):
raise ValueError('unknown options : ' + arg)
@@ -286,6 +334,9 @@ def main(argv: List[str]):
else:
print_result(result, o)
if o.graph:
paint_result(result, o)
if __name__ == '__main__':
main(sys.argv[1:])