youplot 0.4.2 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +67 -76
- data/lib/youplot/backends/unicode_plot.rb +25 -5
- data/lib/youplot/command.rb +1 -1
- data/lib/youplot/parser.rb +4 -5
- data/lib/youplot/version.rb +1 -1
- data/lib/youplot.rb +6 -1
- metadata +5 -75
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b3b1cbdabc0a74b4010d13fa59fe9724ac9c07783414a7a7584f8cab27b49ec
|
4
|
+
data.tar.gz: f5cf98b592a248c4d74e06078d97050e85c892e94c0dd78ec17e92f6bdc856d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aebe50c600b66e9cb8e3a64da3ddafff70472f495d51b812987cc835017ca19fd1347fbe2ee88fac66e111837ffef59bf6c271f2f6515ae7e60a526050ded5b3
|
7
|
+
data.tar.gz: b37e2a5a2d8eb33700690d28b6e6f5851fbefb0e88ae10bcb6d9f65f06f966c31b81c7587135c6d296bde0caefbc81239046ec06535cefa9329f2ac6d8a8788f
|
data/README.md
CHANGED
@@ -1,18 +1,15 @@
|
|
1
1
|
<div align="center">
|
2
|
-
<img src="logo.svg"
|
3
|
-
|
2
|
+
<img src="logo.svg">
|
4
3
|
<hr>
|
4
|
+
<img alt="Build Status" src="https://github.com/red-data-tools/YouPlot/workflows/test/badge.svg">
|
5
|
+
<a href="https://rubygems.org/gems/youplot/"><img alt="Gem Version" src="https://badge.fury.io/rb/youplot.svg"></a>
|
6
|
+
<a href="https://zenodo.org/badge/latestdoi/283230219"><img alt="DOI" src="https://zenodo.org/badge/283230219.svg"></a>
|
7
|
+
<a href="https://rubydoc.info/gems/youplot/"><img alt="Docs Stable" src="https://img.shields.io/badge/docs-stable-blue.svg"></a>
|
8
|
+
<a href="LICENSE.txt"><img alt="The MIT License" src="https://img.shields.io/badge/license-MIT-blue.svg"></a>
|
5
9
|
|
6
|
-
|
7
|
-
[](https://badge.fury.io/rb/youplot)
|
8
|
-
[](https://rubydoc.info/gems/youplot)
|
9
|
-
[](LICENSE.txt)
|
10
|
-
[](https://zenodo.org/badge/latestdoi/283230219)
|
11
|
-
|
12
|
-
YouPlot is a command line tool that draws plots in a terminal.
|
10
|
+
YouPlot is a command line tool that draws plots on the terminal.
|
13
11
|
|
14
12
|
:bar_chart: Powered by [UnicodePlot](https://github.com/red-data-tools/unicode_plot.rb)
|
15
|
-
|
16
13
|
</div>
|
17
14
|
|
18
15
|
## Installation
|
@@ -23,8 +20,9 @@ gem install youplot
|
|
23
20
|
|
24
21
|
## Quick Start
|
25
22
|
|
26
|
-
|
27
|
-
|
23
|
+
<img alt="barplot" src="https://user-images.githubusercontent.com/5798442/101999903-d36a2d00-3d24-11eb-9361-b89116f44122.png" width=160> <img alt="histogram" src="https://user-images.githubusercontent.com/5798442/101999820-21cafc00-3d24-11eb-86db-e410d19b07df.png" width=160> <img alt="scatter" src="https://user-images.githubusercontent.com/5798442/101999827-27284680-3d24-11eb-9903-551857eaa69c.png" width=160> <img alt="density" src="https://user-images.githubusercontent.com/5798442/101999828-2abbcd80-3d24-11eb-902c-2f44266fa6ae.png" width=160> <img alt="boxplot" src="https://user-images.githubusercontent.com/5798442/101999830-2e4f5480-3d24-11eb-8891-728c18bf5b35.png" width=160>
|
24
|
+
|
25
|
+
`uplot <command> [options] <data.tsv>`
|
28
26
|
|
29
27
|
### barplot
|
30
28
|
|
@@ -36,7 +34,7 @@ curl -sL https://git.io/ISLANDScsv \
|
|
36
34
|
```
|
37
35
|
|
38
36
|
<p align="center">
|
39
|
-
<img alt="barplot" src="https://user-images.githubusercontent.com/5798442/101999903-d36a2d00-3d24-11eb-9361-b89116f44122.png">
|
37
|
+
<img alt="barplot" src="https://user-images.githubusercontent.com/5798442/101999903-d36a2d00-3d24-11eb-9361-b89116f44122.png">
|
40
38
|
</p>
|
41
39
|
|
42
40
|
### histogram
|
@@ -103,10 +101,6 @@ curl -sL https://git.io/IRIStsv \
|
|
103
101
|
|
104
102
|
### count
|
105
103
|
|
106
|
-
In this example, YouPlot counts the number of chromosomes where the gene is located from the human gene annotation file and it creates a bar chart. The human gene annotation file can be downloaded from the following website.
|
107
|
-
|
108
|
-
* https://www.gencodegenes.org/human/
|
109
|
-
|
110
104
|
```sh
|
111
105
|
cat gencode.v35.annotation.gff3 \
|
112
106
|
| grep -v '#' | grep 'gene' | cut -f1 \
|
@@ -117,23 +111,21 @@ cat gencode.v35.annotation.gff3 \
|
|
117
111
|
<img alt="count" src="https://user-images.githubusercontent.com/5798442/101999832-30b1ae80-3d24-11eb-96fe-e5000bed1f5c.png">
|
118
112
|
</p>
|
119
113
|
|
114
|
+
In this example, YouPlot counts the number of chromosomes where genes are located.
|
115
|
+
* [GENCODE - Human Release](https://www.gencodegenes.org/human/)
|
116
|
+
|
120
117
|
Note: `count` is not very fast because it runs in a Ruby script.
|
121
118
|
This is fine in most cases, as long as the data size is small. If you want to visualize huge data, it is faster to use a combination of common Unix commands as shown below.
|
122
119
|
|
123
120
|
```sh
|
124
121
|
cat gencode.v35.annotation.gff3 | grep -v '#' | grep 'gene' | cut -f1 \
|
125
|
-
| sort | uniq -c | sort -
|
126
|
-
| uplot bar -d ' ' -t "The number of human gene annotations per chromosome" -c blue
|
122
|
+
| sort | uniq -c | sort -nrk1 \
|
123
|
+
| uplot bar --fmt yx -d ' ' -t "The number of human gene annotations per chromosome" -c blue
|
127
124
|
```
|
128
125
|
|
129
126
|
## Usage
|
130
127
|
|
131
|
-
###
|
132
|
-
|
133
|
-
Wouldn't it be a pain to have to run R, Python, Julia, gnuplot or whatever REPL just to check your data?
|
134
|
-
YouPlot is a command line tool for this purpose. With YouPlot, you can continue working without leaving your terminal and shell.
|
135
|
-
|
136
|
-
### How to use YouPlot?
|
128
|
+
### Commands
|
137
129
|
|
138
130
|
`uplot` is the shortened form of `youplot`. You can use either.
|
139
131
|
|
@@ -143,18 +135,7 @@ YouPlot is a command line tool for this purpose. With YouPlot, you can continue
|
|
143
135
|
| `uplot <command> [options] data.tsv ...` | Take input from files |
|
144
136
|
| `pipeline1 \| uplot <command> -O \| pipeline2` | Outputs data from stdin to stdout |
|
145
137
|
|
146
|
-
###
|
147
|
-
|
148
|
-
By default, the plot is output to *standard error output*.
|
149
|
-
The output file or stream for the plot can be specified with the `-o` option.
|
150
|
-
|
151
|
-
### Where to output the input data?
|
152
|
-
|
153
|
-
By default, the input data is not shown anywhere.
|
154
|
-
The `-O` option, with no arguments, outputs the input data directly to the standard output.
|
155
|
-
This is useful when passing data to a subsequent pipeline.
|
156
|
-
|
157
|
-
### What types of plots are available?
|
138
|
+
### Subcommands
|
158
139
|
|
159
140
|
The following sub-commands are available.
|
160
141
|
|
@@ -167,66 +148,75 @@ The following sub-commands are available.
|
|
167
148
|
| scatter | s | draw a scatter plot |
|
168
149
|
| density | d | draw a density plot |
|
169
150
|
| boxplot | box | draw a horizontal boxplot |
|
151
|
+
| | | |
|
152
|
+
| count | c | draw a barplot based on the number of occurrences (slow) |
|
153
|
+
| | | |
|
154
|
+
| colors | color | show the list of available colors |
|
170
155
|
|
171
|
-
|
156
|
+
### Output the plot
|
172
157
|
|
173
|
-
|
174
|
-
|
175
|
-
|
158
|
+
* `-o`
|
159
|
+
* By default, the plot is output to **standard error output**.
|
160
|
+
* If you want to output to standard input, Use hyphen ` -o -` or no argument `uplot s -o | `.
|
176
161
|
|
177
|
-
###
|
162
|
+
### Output the input data
|
178
163
|
|
179
|
-
|
164
|
+
* `-O`
|
165
|
+
* By default, the input data is not shown anywhere.
|
166
|
+
* If you want to pass the input data directly to the standard output, Use hyphen `-O -` or no argument `uplot s -O |`.
|
167
|
+
* This is useful when passing data to a subsequent pipeline.
|
180
168
|
|
181
|
-
###
|
169
|
+
### Header
|
182
170
|
|
183
|
-
|
184
|
-
|
171
|
+
* `-H`
|
172
|
+
* If input data contains a header line, you need to specify the `-H` option.
|
185
173
|
|
186
|
-
###
|
174
|
+
### Delimiter
|
187
175
|
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
If you pass only one column of data for `line` and `bar`, YouPlot will automatically use a sequential number starting from 1 as the X-axis.
|
176
|
+
* `-d`
|
177
|
+
* You do not need to use `-d` option for tab-delimited text since the default value is tab.
|
178
|
+
* To specify a blank space, you can use `uplot bar -d ' ' data.txt`.
|
192
179
|
|
193
|
-
|
194
|
-
See `youplot <command> --help` for more details.
|
180
|
+
### Real-time data
|
195
181
|
|
196
|
-
*
|
197
|
-
*
|
182
|
+
* `-p` `--progress`
|
183
|
+
* Experimental progressive mode is currently under development.
|
184
|
+
* `ruby -e 'loop{puts rand(100)}' | uplot line --progress`
|
198
185
|
|
199
|
-
###
|
186
|
+
### Show detailed options for subcommands
|
200
187
|
|
201
|
-
|
188
|
+
* `--help`
|
189
|
+
* The `--help` option will show more detailed options for each subcommand.
|
190
|
+
* `uplot hist --help`
|
202
191
|
|
203
|
-
|
204
|
-
ruby -e 'loop{puts rand(100)}' | uplot line --progress
|
205
|
-
```
|
192
|
+
### Set columns as x-axis or y-axis
|
206
193
|
|
207
|
-
|
194
|
+
* YouPlot treats the first column as the X axis and the second column as the Y axis. When working with multiple series, the first column is the X axis, the second column is series Y1, the third column is series Y2, and so on.
|
195
|
+
* If you pass only one column of data for `line` and `bar`, YouPlot will automatically use a sequential number starting from 1 as the X-axis.
|
208
196
|
|
209
|
-
|
197
|
+
* `--fmt`
|
198
|
+
* `--fmt xyy` `--fmt xyxy` `--fmt yx` options give you a few more choices. See `youplot <command> --help` for more details.
|
199
|
+
* The fmt option may be renamed in the future.
|
200
|
+
* The `-x` and `-y` options might be used to specify columns in the future.
|
210
201
|
|
211
|
-
`
|
202
|
+
* Use `awk '{print $2, $1}'` to swap columns. Use `paste` to concatenate series.
|
212
203
|
|
213
|
-
|
214
|
-
Usage: uplot histogram [options] <in.tsv>
|
204
|
+
### Categorical data
|
215
205
|
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
-n, --nbins VAL approximate number of bins
|
206
|
+
* With GNU datamash, you can manage to handle categorized data.
|
207
|
+
* `cat test/fixtures/iris.csv | sed '/^$/d' | datamash --header-in --output-delimiter=: -t, -g5 collapse 3,4 | cut -f2-3 -d: | sed 's/:/\n/g' | uplot s -d, -T --fmt xyxy`
|
208
|
+
* This is not so easy...
|
220
209
|
|
221
|
-
|
222
|
-
...
|
223
|
-
```
|
210
|
+
### Time series
|
224
211
|
|
225
|
-
|
212
|
+
* Not yet supported.
|
226
213
|
|
227
|
-
|
228
|
-
|
229
|
-
|
214
|
+
## Tools that are useful to use with YouPlot
|
215
|
+
|
216
|
+
* [csvtk](https://github.com/shenwei356/csvtk)
|
217
|
+
* [GNU datamash](https://www.gnu.org/software/datamash/)
|
218
|
+
* [awk](https://www.gnu.org/software/gawk/)
|
219
|
+
* [xsv](https://github.com/BurntSushi/xsv)
|
230
220
|
|
231
221
|
## Contributing
|
232
222
|
|
@@ -248,6 +238,7 @@ git clone https://github.com/your_name/YouPlot
|
|
248
238
|
bundle install # Install the gem dependencies
|
249
239
|
bundle exec rake test # Run the test
|
250
240
|
bundle exec rake install # Installation from source code
|
241
|
+
bundle exec exe/uplot # Run youplot (Try out the edited code)
|
251
242
|
```
|
252
243
|
|
253
244
|
### Acknowledgements
|
@@ -6,6 +6,27 @@
|
|
6
6
|
require_relative 'processing'
|
7
7
|
require 'unicode_plot'
|
8
8
|
|
9
|
+
# If the line color is specified as a number, the program will display an error
|
10
|
+
# message to the user and exit. Remove this patch when UnicodePlot is improved.
|
11
|
+
|
12
|
+
module UnicodePlot
|
13
|
+
class << self
|
14
|
+
alias lineplot_original lineplot
|
15
|
+
def lineplot(*args, **kw)
|
16
|
+
if kw[:color].is_a? Numeric
|
17
|
+
warn <<~EOS
|
18
|
+
YouPlot: Line colors cannot be specified by numerical values.
|
19
|
+
|
20
|
+
For more information, please see the following issue.
|
21
|
+
https://github.com/red-data-tools/unicode_plot.rb/issues/34
|
22
|
+
EOS
|
23
|
+
YouPlot.run_as_executable ? exit(1) : raise(Error)
|
24
|
+
end
|
25
|
+
lineplot_original(*args, **kw)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
9
30
|
module YouPlot
|
10
31
|
# plotting functions.
|
11
32
|
module Backends
|
@@ -106,11 +127,10 @@ module YouPlot
|
|
106
127
|
|
107
128
|
def plot_xyxy(data, method1, params)
|
108
129
|
headers = data.headers
|
109
|
-
|
130
|
+
series2 = data.series
|
131
|
+
.map { |s| s.map(&:to_f) }
|
132
|
+
.each_slice(2).to_a
|
110
133
|
method2 = get_method2(method1)
|
111
|
-
series.map! { |s| s.map(&:to_f) }
|
112
|
-
series2 = series.each_slice(2).to_a
|
113
|
-
series = nil
|
114
134
|
params.name ||= headers[0] if headers
|
115
135
|
params.xlim ||= series2.map(&:first).flatten.minmax # why need?
|
116
136
|
params.ylim ||= series2.map(&:last).flatten.minmax # why need?
|
@@ -182,7 +202,7 @@ module YouPlot
|
|
182
202
|
series = data.series
|
183
203
|
if series.size == 1
|
184
204
|
warn <<~EOS
|
185
|
-
|
205
|
+
YouPlot: There is only one series of input data. Please check the delimiter.
|
186
206
|
|
187
207
|
Headers: \e[35m#{data.headers.inspect}\e[0m
|
188
208
|
The first item is: \e[35m\"#{series[0][0]}\"\e[0m
|
data/lib/youplot/command.rb
CHANGED
data/lib/youplot/parser.rb
CHANGED
@@ -58,10 +58,10 @@ module YouPlot
|
|
58
58
|
parser.on('-t', '--title STR', String, 'print string on the top of plot') do |v|
|
59
59
|
params.title = v
|
60
60
|
end
|
61
|
-
parser.on('
|
61
|
+
parser.on('--xlabel STR', String, 'print string on the bottom of the plot') do |v|
|
62
62
|
params.xlabel = v
|
63
63
|
end
|
64
|
-
parser.on('
|
64
|
+
parser.on('--ylabel STR', String, 'print string on the far left of the plot') do |v|
|
65
65
|
params.ylabel = v
|
66
66
|
end
|
67
67
|
parser.on('-w', '--width INT', Numeric, 'number of characters per row') do |v|
|
@@ -95,7 +95,7 @@ module YouPlot
|
|
95
95
|
parser.on('-M', '--monochrome', TrueClass, 'no colouring even if writing to a tty') do |_v|
|
96
96
|
UnicodePlot::IOContext.define_method(:color?) { false } # FIXME
|
97
97
|
end
|
98
|
-
parser.on('--encoding STR', String, '
|
98
|
+
parser.on('--encoding STR', String, 'specify the input encoding') do |v|
|
99
99
|
options[:encoding] = v
|
100
100
|
end
|
101
101
|
# Optparse adds the help option, but it doesn't show up in usage.
|
@@ -130,10 +130,9 @@ module YouPlot
|
|
130
130
|
scatter s draw a scatter plot
|
131
131
|
density d draw a density plot
|
132
132
|
boxplot box draw a horizontal boxplot
|
133
|
-
colors color show the list of available colors
|
134
|
-
|
135
133
|
count c draw a baplot based on the number of
|
136
134
|
occurrences (slow)
|
135
|
+
colors color show the list of available colors
|
137
136
|
|
138
137
|
General options:
|
139
138
|
--help print command specific help menu
|
data/lib/youplot/version.rb
CHANGED
data/lib/youplot.rb
CHANGED
@@ -6,6 +6,12 @@ require_relative 'youplot/parameters'
|
|
6
6
|
require_relative 'youplot/command'
|
7
7
|
|
8
8
|
module YouPlot
|
9
|
+
# @run_as_executable = true / false
|
10
|
+
# YouPlot behaves slightly differently when run as a command line tool
|
11
|
+
# and when run as a script (e.g. for testing). In the event of an error,
|
12
|
+
# when run as a command line tool, YouPlot will display a short error message
|
13
|
+
# and exit abnormally. When run as a script, it will just raise an error.
|
14
|
+
@run_as_executable = false
|
9
15
|
class << self
|
10
16
|
attr_accessor :run_as_executable
|
11
17
|
|
@@ -13,5 +19,4 @@ module YouPlot
|
|
13
19
|
@run_as_executable
|
14
20
|
end
|
15
21
|
end
|
16
|
-
@run_as_executable = false
|
17
22
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: youplot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kojix2
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-11-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: unicode_plot
|
@@ -16,84 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 0.0.5
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: bundler
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rake
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rubocop
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: simplecov
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: test-unit
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
26
|
+
version: 0.0.5
|
97
27
|
description: A command line tool for Unicode Plotting
|
98
28
|
email:
|
99
29
|
- 2xijok@gmail.com
|
@@ -135,7 +65,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
135
65
|
- !ruby/object:Gem::Version
|
136
66
|
version: '0'
|
137
67
|
requirements: []
|
138
|
-
rubygems_version: 3.2.
|
68
|
+
rubygems_version: 3.2.26
|
139
69
|
signing_key:
|
140
70
|
specification_version: 4
|
141
71
|
summary: A command line tool for Unicode Plotting
|