forked from glamp/bashplotlib
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscatterplot.py
More file actions
97 lines (78 loc) · 2.95 KB
/
scatterplot.py
File metadata and controls
97 lines (78 loc) · 2.95 KB
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
90
91
92
93
94
95
96
97
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Plotting terminal based scatterplots
"""
import sys
import optparse
from .utils.helpers import (drange,
box_text,
printcolour,
colour_help)
from .utils.commandhelp import scatter
def get_scale(series, is_y=False, steps=20):
min_val = min(series)
max_val = max(series)
scaled_series = []
for x in drange(min_val, max_val, (max_val-min_val)/steps):
if x > 0 and scaled_series and max(scaled_series) < 0:
scaled_series.append(0.0)
scaled_series.append(x)
if is_y:
scaled_series.reverse()
return scaled_series
def plot_scatter(points,
size,
pch,
colour='white',
title='Plot1'):
"""
Form a complex number.
Arguments:
points -- iterable containing (x, y) coordinate pairs
size -- size of the plot
pch -- shape of the points (any character)
colour -- colour of the points
title -- title of the plot
"""
xs = [point[0] for point in points]
ys = [point[1] for point in points]
plotted = set()
if title:
print box_text(title, 2*len(get_scale(xs, False, size))+1)
print "-" * (2*len(get_scale(xs, False, size))+2)
for y in get_scale(ys, True, size):
print "|",
for x in get_scale(xs, False, size):
point = " "
for xp, yp in zip(xs, ys):
if xp <= x and yp >= y and (xp, yp) not in plotted:
point = pch
plotted.add((xp, yp))
if x==0 and y==0:
point = "o"
elif x==0:
point = "|"
elif y==0:
point = "-"
printcolour(point, True, colour)
print "|"
print "-"*(2*len(get_scale(xs, False, size))+2)
def main():
parser = optparse.OptionParser(usage=scatter['usage'])
parser.add_option('-f', '--file', help='a csv w/ x and y coordinates', default=None, dest='f')
parser.add_option('-t', '--title', help='title for the chart', default="", dest='t')
parser.add_option('-x', help='x coordinates', default=None, dest='x')
parser.add_option('-y', help='y coordinates', default=None, dest='y')
parser.add_option('-s', '--size',help='y coordinates', default=20, dest='size', type='int')
parser.add_option('-p', '--pch',help='shape of point', default="x", dest='pch')
parser.add_option('-c', '--colour', help='colour of the plot (%s)' % colour_help, default='default', dest='colour')
opts, args = parser.parse_args()
if opts.f is None and (opts.x is None or opts.y is None):
opts.f = sys.stdin.readlines()
if opts.f or (opts.x and opts.y):
plot_scatter(opts.f, opts.x, opts.y, opts.size, opts.pch, opts.colour, opts.t)
else:
print "nothing to plot!"
if __name__=="__main__":
main()