forked from sshi27/plot
-
Notifications
You must be signed in to change notification settings - Fork 0
/
plot.py
89 lines (73 loc) · 2.5 KB
/
plot.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import json, ast, sys
import matplotlib
from matplotlib.font_manager import FontProperties
import matplotlib.pyplot as plt
fontProp = FontProperties(fname="./LinLibertine_R.ttf")
# plt.rc('text', usetex=True)
matplotlib.rcParams.update({
'text.latex.preamble': "\\usepackage{libertine}\n\\usepackage[libertine]{newtxmath}\n\\usepackage{sfmath}\n\\usepackage[T1]{fontenc}",
'pdf.fonttype': 42,
'ps.fonttype': 42,
'font.family': fontProp.get_name(), # fontProp.get_name(),
'text.usetex': True,
# 'font.serif': ['Times New Roman Bold', 'FreeSerifBold'],
})
matplotlib.font_manager._rebuild()
from multiple_line import MultipleLines
from parallel_bar import ParallelBars
from annotated_bar import AnnotatedBars
from violin import Violin
from cdf import Cdf
from heatmap import HeatMap
import rapidjson
import copy
forth = [114, 83]
third = [173, 122]
half = [238, 109]
from datetime import datetime
def nonEmptyIterable(obj):
"""return true if *obj* is iterable"""
try:
var = obj[0]
return True
except:
return False
class Ploter:
def plot(self, data, fig=None, ax=None):
fout = open('../plot/back/%s.json' % datetime.now().strftime('%Y-%B-%d-%H-%M-%S'), 'w')
fout.write(data if isinstance(data, str) else rapidjson.dumps(data))
fout.close()
def work(data):
if isinstance(data, str):
try:
data = rapidjson.loads(data)
except Exception as e1:
try:
data = ast.literal_eval(data)
except Exception as e2:
print(e1)
print(e2)
raise Exception("Please input a valid json or python object string")
if not isinstance(data, dict):
raise Exception("Please input a valid json or python object string, or an object")
plt.rc('text', usetex=data.get('usetex', False))
type = data.get('type', None)
if type == 'bar':
ParallelBars().draw(data, fig, ax)
elif type == 'line':
MultipleLines().draw(data, fig, ax)
elif type == 'cdf':
Cdf().draw(data, fig, ax)
elif type == 'annotated_bar':
AnnotatedBars().draw(data, fig, ax)
elif type == 'violin':
Violin().draw(data, fig, ax)
elif type == 'heatmap':
HeatMap().draw(data, fig, ax)
else:
raise Exception("Please specify type in json. Supported: bar, line, cdf")
if nonEmptyIterable(data):
for d in data:
work(d)
else:
work(data)