GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — bashplotlib/bashplotlib/scatterplot.py at master · trungnt13/bashplotlib

Expand file tree

/

scatterplot.py

Copy path
More file actions
More file actions

Latest commit

 

History

History
History
154 lines (132 loc) · 4.89 KB
/

scatterplot.py

Copy path

File metadata and controls

154 lines (132 loc) · 4.89 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# -*- coding: utf-8 -*-
"""
Plotting terminal based scatterplots
"""
from __future__ import print_function
import csv
import sys
import optparse
from os.path import isfile
from .utils.helpers import *
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,
include_stop=True):
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(xs, ys, size=None, pch='o',
colour='red', title=None, return_str=False):
''' Scatter plot.
----------------------
| * |
| * |
| * |
| * |
| * |
| * |
| * |
| * |
-----------------------
Parameters
----------
xs : list, numpy.ndarray
list of x series
ys : list, numpy.ndarray
list of y series
size : int
width of plot
pch : str
any character to represent a points
colour : str, list(str)
white,aqua,pink,blue,yellow,green,red,grey,black,default,ENDC
title : str
title for the plot, None = not show
return_str : boolean
return string represent the plot or print it out, default: False
'''
splot = ''
plotted = set()
cs = colour
if size is None:
size = 13
if title:
splot += print_return_str(
box_text(title, 2 * len(get_scale(xs, False, size)) + 1),
return_str=return_str)
# ====== Top line ====== #
splot += print_return_str(' ' + "-" * (len(get_scale(xs, False, size)) + 2),
return_str=return_str)
# ====== Main plot ====== #
for y in get_scale(ys, True, size):
splot += print_return_str("|", end=' ', return_str=return_str)
for x in get_scale(xs, False, size):
point = " "
for (i, (xp, yp)) in enumerate(zip(xs, ys)):
if xp <= x and yp >= y and (xp, yp) not in plotted:
point = pch
plotted.add((xp, yp))
if isinstance(cs, list):
colour = cs[i]
splot += printcolour(point, True, colour, return_str)
splot += print_return_str(" |", return_str=return_str)
# ====== Bottom line ====== #
splot += print_return_str(' ' + "-" * (len(get_scale(xs, False, size)) + 2),
return_str=return_str)
if return_str:
return splot
def _plot_scatter(f, xs, ys, size, pch, colour, title):
"""
Form a complex number.
Arguments:
f -- comma delimited file w/ x,y coordinates
xs -- if f not specified this is a file w/ x coordinates
ys -- if f not specified this is a filew / y coordinates
size -- size of the plot
pch -- shape of the points (any character)
colour -- colour of the points
title -- title of the plot
"""
if f:
if isinstance(f, str):
f = open(f)
data = [tuple(line.strip().split(',')) for line in f]
xs = [float(i[0]) for i in data]
ys = [float(i[1]) for i in data]
if len(data[0]) > 2:
cs = [i[2].strip() for i in data]
else:
cs = None
else:
xs = [float(str(row).strip()) for row in open(xs)]
ys = [float(str(row).strip()) for row in open(ys)]
if isfile(colour):
cs = [str(row).strip() for row in open(colour)]
else:
cs = colour
plot_scatter(xs, ys, size=size, pch=pch, colour=cs, title=title)
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()
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.