• Stars
    star
    4,128
  • Rank 10,492 (Top 0.3 %)
  • Language
    Ruby
  • License
    MIT License
  • Created over 4 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A command line tool that draw plots on the terminal.

Build Status Gem Version DOI Docs Stable The MIT License

YouPlot is a command line tool that draws plots on the terminal.

πŸ“Š Powered by UnicodePlot

Installation

brew install youplot
gem install youplot
guix install youplot
conda install -c conda-forge ruby
conda install -c conda-forge compilers
gem install youplot

Quick Start

barplot histogram scatter density boxplot

uplot <command> [options] <data.tsv>

barplot

curl -sL https://git.io/ISLANDScsv \
| sort -nk2 -t, \
| tail -n15 \
| uplot bar -d, -t "Areas of the World's Major Landmasses"

barplot

# For offline user: Sorts files in a directory by size and shows a bar graph.
ls -l | awk '{print $9, $5}' | sort -nk 2 | uplot bar -d ' '

histogram

echo -e "from numpy import random;" \
        "n = random.randn(10000);"  \
        "print('\\\n'.join(str(i) for i in n))" \
| python3 \
| uplot hist --nbins 20

histogram

lineplot

curl -sL https://git.io/AirPassengers \
| cut -f2,3 -d, \
| uplot line -d, -w 50 -h 15 -t AirPassengers --xlim 1950,1960 --ylim 0,600

lineplot

# For offline users: Calculates sin values (0-2*pi) and plots a sine wave.
python3 -c '
from math import sin, pi
data = "\n".join(f"{i*pi/50}\t{sin(i*pi/50)}" for i in range(101))
print(data)' | uplot line

scatter

curl -sL https://git.io/IRIStsv \
| cut -f1-4 \
| uplot scatter -H -t IRIS

scatter

# For offline users
cat test/fixtures/iris.csv | cut -f1-4 -d, | uplot scatter -H -d, -t IRIS

density

curl -sL https://git.io/IRIStsv \
| cut -f1-4 \
| uplot density -H -t IRIS

density

# For offline users
cat test/fixtures/iris.csv | cut -f1-4 -d, | uplot density -H -d, -t IRIS

boxplot

curl -sL https://git.io/IRIStsv \
| cut -f1-4 \
| uplot boxplot -H -t IRIS

boxplot

# For offline users
cat test/fixtures/iris.csv | cut -f1-4 -d, | uplot boxplot -H -d, -t IRIS

count

Count processes by user ID.

ps aux | awk '{print $1}' | uplot count

Count the number of chromosomes where genes are located.

cat gencode.v35.annotation.gff3 \
| grep -v '#' | grep 'gene' | cut -f1 \
| uplot count -t "The number of human gene annotations per chromosome"  -c blue

count

Note: count is not very fast because it runs in a Ruby script. 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.

cat gencode.v35.annotation.gff3 | grep -v '#' | grep 'gene' | cut -f1 \
| sort | uniq -c | sort -nrk1 \
| uplot bar --fmt yx -d ' ' -t "The number of human gene annotations per chromosome"  -c blue

Usage

Commands

uplot is the shortened form of youplot. You can use either.

Command Description
cat data.tsv | uplot <command> [options] Take input from stdin
uplot <command> [options] data.tsv ... Take input from files
pipeline1 | uplot <command> -O | pipeline2 Outputs data from stdin to stdout

Subcommands

The following sub-commands are available.

command short how it works
barplot bar draw a horizontal barplot
histogram hist draw a horizontal histogram
lineplot line draw a line chart
lineplots lines draw a line chart with multiple series
scatter s draw a scatter plot
density d draw a density plot
boxplot box draw a horizontal boxplot
count c draw a barplot based on the number of occurrences (slow)
colors color show the list of available colors

Output the plot

  • -o
    • By default, the plot is output to standard error output.
    • If you want to output to standard output, Use hyphen -o - or no argument uplot s -o | .

Output the input data

  • -O
    • By default, the input data is not shown anywhere.
    • If you want to pass the input data directly to the standard output, Use hyphen -O - or no argument uplot s -O |.
    • This is useful when passing data to a subsequent pipeline.

Header

  • -H
    • If input data contains a header line, you need to specify the -H option.

Delimiter

  • -d
    • You do not need to use -d option for tab-delimited text since the default value is tab.
    • To specify a blank space, you can use uplot bar -d ' ' data.txt.

Real-time data

  • -p --progress
    • Experimental progressive mode is currently under development.
    • ruby -e 'loop{puts rand(100)}' | uplot line --progress

Show detailed options for subcommands

  • --help
    • The --help option will show more detailed options for each subcommand.
    • uplot hist --help

Set columns as x-axis or y-axis

  • 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.

  • 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.

  • --fmt

    • --fmt xyy --fmt xyxy --fmt yx options give you a few more choices. See youplot <command> --help for more details.
    • The fmt option may be renamed in the future.
    • The -x and -y options might be used to specify columns in the future.
  • Use awk '{print $2, $1}' to swap columns. Use paste to concatenate series.

Categorical data

  • With GNU datamash, you can manage to handle categorized data.
    • 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
    • This is not so easy...

Time series

  • Not yet supported.

YouPlot Configuration (youplotrc)

You can specify default options in a configuration file in YAML format. For more information, enter the following command.

uplot --config

Tools that are useful to use with YouPlot

Contributing

YouPlot is a library under development, so even small improvements like typofix are welcome! Please feel free to send us your pull requests.

  • Report bugs
  • Fix bugs and submit pull requests
  • Write, clarify, or fix documentation
    • English corrections by native speakers are welcome.
  • Suggest or add new features
  • Make a donation

Development

# fork the main repository by clicking the Fork button. 
git clone https://github.com/your_name/YouPlot
bundle install             # Install the gem dependencies
bundle exec rake test      # Run the test
bundle exec rake install   # Installation from source code
bundle exec exe/uplot      # Run youplot (Try out the edited code)
Do you need commit rights to my repository?
Do you want to get admin rights and take over the project?
If so, please feel free to contact us.

Acknowledgements

License

MIT License.

More Repositories

1

unicode_plot.rb

Plot your data by Unicode characters
Ruby
246
star
2

charty

Visualizing your data in Ruby
Ruby
191
star
3

jekyll-jupyter-notebook

Jekyll Jupyter Notebook plugin
Ruby
161
star
4

red-chainer

A flexible framework for neural network for Ruby
Ruby
103
star
5

GR.rb

Ruby wrapper for the GR framework
Ruby
93
star
6

red_amber

A dataframe library for Rubyists.
Ruby
64
star
7

red-arrow

Ruby bindings for Apache Arrow based on GObject Introspection
Ruby
52
star
8

red-datasets

A RubyGem that provides common datasets
Ruby
30
star
9

extpp

C++ Ruby extension API
C++
20
star
10

packages.red-data-tools.org

The source of packages.red-data-tools.org
Ruby
13
star
11

parquet-glib

GLib wrapper library of Apache Parquet
C++
10
star
12

red-arrow-duckdb

A library that provides Apache Arrow support to ruby-duckdb
C++
9
star
13

red-parquet

Ruby bindings for Apache Parquet based on GObject Introspection
Ruby
7
star
14

activerecord-duckdb-adapter

Ruby
6
star
15

red-opencv

Ruby bindings for OpenCL based on GObject Introspection
Ruby
6
star
16

red-optuna

Ruby bindings for Optuna, a hyperparameter optimization framework
Ruby
5
star
17

red-datasets-arrow

A Red Datasets plugin to export dataset as Apache Arrow object
Ruby
5
star
18

red-colors

Color features for Ruby
Ruby
4
star
19

red-arrow-activerecord

A library that provides conversion method between Apache Arrow and Active Record
Ruby
4
star
20

red-arrow-nmatrix

A library that provides conversion method between Apache Arrow and NMatrix
Ruby
3
star
21

xtensor-arrow-glib

GLib wrapper library of xtensor for Apache Arrow
C++
3
star
22

opencv-glib

GLib bindings for OpenCV
C++
3
star
23

activerecord-adbc-adapter

ADBC based Active Record adapter
Ruby
3
star
24

red-arrow-numo-narray

A library that provides conversion method between Apache Arrow and Numo::NArray
Ruby
3
star
25

red-datasets-numo-narray

A Red Datasets plugin to export dataset as Numo::NArray object
Ruby
3
star
26

red-table-query

Universal query interface for table data
Ruby
3
star
27

red-arrow-pycall

A library that provides conversion method between Apache Arrow and PyCall
Ruby
3
star
28

dlib-glib

GLib bindings for Dlib
C++
2
star
29

fluent-plugin-s3-arrow

Extends the fluent-plugin-s3 compression algorithm to enable red-arrow compression.
Ruby
2
star
30

red-datasets-parquet

A Red Datasets plugin to process datasets provided as Apache Parquet format
Ruby
2
star
31

red-datasets-gdk-pixbuf

A Red Datasets plugin to export dataset as GdkPixbuf::Pixbuf object
Ruby
2
star
32

red-float

Float32 and Float16 for Ruby
C
1
star
33

red-arrow-gsl

A library that provides conversion method between Apache Arrow and Ruby/GSL
Ruby
1
star
34

red-arrow-gpu

Ruby bindings for Apache Arrow GPU based on GObject Introspection
Ruby
1
star
35

charty-backends-jfreechart

Charty JFreeChart backend adapter
Ruby
1
star
36

red-datasets-daru

A Red Datasets plugin to export dataset as Daru::DataFrame object
Ruby
1
star
37

gr-plot

A simple, matlab-style API for GR.rb
Ruby
1
star
38

events

Repository for Red Data Tools related events
1
star
39

red-data-tools.github.io

The Red Data Tools project site
SCSS
1
star
40

red-data-reader

Ruby library to read data
Ruby
1
star
41

activerecord-arrow-adapters

Connection adapters using Apache Arrow internally
Ruby
1
star