From d108b8f7a3b6b21987c8f20e76566d9b51cd6902 Mon Sep 17 00:00:00 2001 From: shenwei356 Date: Wed, 5 Oct 2016 14:05:35 +0800 Subject: [PATCH] v0.3.8 adding new command plot --- README.md | 26 +++- csvtk/cmd/box.go | 204 +++++++++++++++++++++++++++++++ csvtk/cmd/helper.go | 20 +++- csvtk/cmd/hist.go | 6 +- csvtk/cmd/line.go | 213 +++++++++++++++++++++++++++++++++ csvtk/cmd/plot.go | 12 +- csvtk/packaging.sh | 2 +- doc/docs/download.md | 4 + doc/docs/usage.md | 143 +++++++++++++++++++++- doc/site | 2 +- testdata/figures/boxplot.png | Bin 0 -> 19057 bytes testdata/figures/boxplot2.png | Bin 0 -> 12083 bytes testdata/figures/histogram.png | Bin 0 -> 14286 bytes testdata/figures/lineplot.png | Bin 0 -> 24886 bytes testdata/grouped_data.tsv.gz | Bin 42787 -> 27501 bytes testdata/hairpin.fa.gz | Bin 0 -> 1207144 bytes testdata/xy.tsv | 17 +++ 17 files changed, 633 insertions(+), 16 deletions(-) create mode 100644 csvtk/cmd/box.go create mode 100644 csvtk/cmd/line.go create mode 100644 testdata/figures/boxplot.png create mode 100644 testdata/figures/boxplot2.png create mode 100644 testdata/figures/histogram.png create mode 100644 testdata/figures/lineplot.png create mode 100644 testdata/hairpin.fa.gz create mode 100644 testdata/xy.tsv diff --git a/README.md b/README.md index cc60205..1897db3 100644 --- a/README.md +++ b/README.md @@ -20,11 +20,12 @@ and also easy to integrated into analysis pipelines**. - Most of the subcommands support ***unselecting fields*** and ***fuzzy fields***, e.g. `-f "-id,-name"` for all fields except "id" and "name", `-F -f "a.*"` for all fields with prefix "a.". +- **Support common plots** (see [usage](http://bioinf.shenwei.me/csvtk/usage/#plot)) ## Subcommands -19 in total. +20 in total. **Information** @@ -60,6 +61,13 @@ and also easy to integrated into analysis pipelines**. - `sort` sort by selected fields +**Ploting** + +- `plot` see [usage](http://bioinf.shenwei.me/csvtk/usage/#plot) + - `plot hist` histogram + - `plot box` boxplot + - `plot line` line plot + ## Installation [Download Page](https://github.com/shenwei356/csvtk/releases) @@ -203,6 +211,22 @@ Examples - using `--any` to print record if any of the field satisfy the condition: `csvtk filter -f "1-3>0" --any` - fuzzy fields: `csvtk filter -F -f "A*!=0"` +1. ploting + - plot histogram with data of the second column: + `csvtk -t plot hist testdata/grouped_data.tsv.gz -f 2` + ![histogram.png](testdata/figures/histogram.png) + - plot boxplot with data of the "GC Content" (third) column, + group information is the "Group" column. + `csvtk -t plot box testdata/grouped_data.tsv.gz -g "Group" -f "GC Content" --width 3` + ![boxplot.png](testdata/figures/boxplot.png) + - plot horiz boxplot with data of the "Length" (second) column, + group information is the "Group" column. + `csvtk -t plot box testdata/grouped_data.tsv.gz -g "Group" -f "Length" --height 3 --width 5 --horiz --title "Horiz box plot"` + ![boxplot2.png](testdata/figures/boxplot2.png) + - plot line plot with X-Y data + `csvtk -t plot line testdata/xy.tsv -x X -y Y -g Group` + ![lineplot.png](testdata/figures/lineplot.png) + ## Contact Email me for any problem when using `csvtk`. shenwei356(at)gmail.com diff --git a/csvtk/cmd/box.go b/csvtk/cmd/box.go new file mode 100644 index 0000000..45709c7 --- /dev/null +++ b/csvtk/cmd/box.go @@ -0,0 +1,204 @@ +// Copyright © 2016 Wei Shen +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +package cmd + +import ( + "fmt" + "runtime" + "sort" + "strconv" + + "github.com/gonum/plot" + "github.com/gonum/plot/plotter" + "github.com/gonum/plot/vg" + "github.com/shenwei356/util/stringutil" + "github.com/spf13/cobra" +) + +// boxCmd represents the box command +var boxCmd = &cobra.Command{ + Use: "box", + Short: "plot boxplot", + Long: `plot boxplot + +`, + Run: func(cmd *cobra.Command, args []string) { + config := getConfigs(cmd) + plotConfig := getPlotConfigs(cmd) + + files := getFileList(args) + if len(files) > 1 { + checkError(fmt.Errorf("no more than one file should be given")) + } + runtime.GOMAXPROCS(config.NumCPUs) + + file := files[0] + headerRow, data, fields := parseCSVfile(cmd, config, file, plotConfig.fieldStr, false) + + // ======================================= + + horiz := getFlagBool(cmd, "horiz") + w := vg.Length(getFlagNonNegativeFloat64(cmd, "box-width")) + + if config.OutFile == "-" { + config.OutFile = "boxplot.png" + } + if plotConfig.title == "" { + plotConfig.title = "Box plot" + } + + groups := make(map[string]plotter.Values) + groupOrderMap := make(map[string]int) + var f float64 + var err error + var ok bool + var order int + var groupName string + for _, d := range data { + f, err = strconv.ParseFloat(d[0], 64) + if err != nil { + if len(headerRow) > 0 { + checkError(fmt.Errorf("fail to parse data: %s at column: %s. please choose the right column by flag -f (--data-field)", d[0], headerRow[0])) + } else { + checkError(fmt.Errorf("fail to parse data: %s at column: %d. please choose the right column by flag -f (--data-field)", d[0], fields[0])) + } + } + if len(d) > 1 { + groupName = d[1] + } else { + if len(headerRow) > 0 { + groupName = headerRow[0] + } else { + groupName = "" + } + } + if _, ok = groups[groupName]; !ok { + groups[groupName] = make(plotter.Values, 0) + } + groups[groupName] = append(groups[groupName], f) + + if _, ok = groupOrderMap[groupName]; !ok { + groupOrderMap[groupName] = order + order++ + } + } + + p, err := plot.New() + if err != nil { + checkError(err) + } + + var groupOrders []stringutil.StringCount + for g := range groupOrderMap { + groupOrders = append(groupOrders, stringutil.StringCount{Key: g, Count: groupOrderMap[g]}) + } + sort.Sort(stringutil.StringCountList(groupOrders)) + + if !horiz { + if w == 0 { + w = vg.Points(float64(plotConfig.width*vg.Inch) / float64(len(groupOrders)) / 2.5) + } + } else { + if w == 0 { + w = vg.Points(float64(plotConfig.height*vg.Inch) / float64(len(groupOrders)) / 2.5) + } + } + + groupNames := make([]string, len(groupOrders)) + for i, group := range groupOrders { + groupNames[i] = group.Key + b, err := plotter.NewBoxPlot(w, float64(i), groups[group.Key]) + checkError(err) + if horiz { + b.Horizontal = true + } + p.Add(b) + } + + if !horiz { + p.NominalX(groupNames...) + // p.HideX() + } else { + p.NominalY(groupNames...) + // p.HideY() + } + if !horiz { + if plotConfig.ylab == "" { + if len(headerRow) > 0 { + plotConfig.ylab = headerRow[0] + } else { + plotConfig.ylab = "Values" + } + } + if plotConfig.xlab == "" { + if len(headerRow) > 0 { + plotConfig.xlab = headerRow[1] + } else { + plotConfig.xlab = "Groups" + } + } + } else { + if plotConfig.xlab == "" { + plotConfig.xlab = "Values" + } + if plotConfig.ylab == "" && plotConfig.groupFieldStr != "" && len(headerRow) > 0 { + plotConfig.ylab = headerRow[0] + } + } + + p.Title.Text = plotConfig.title + p.Title.TextStyle.Font.Size = plotConfig.titleSize + p.X.Label.Text = plotConfig.xlab + p.Y.Label.Text = plotConfig.ylab + p.X.Label.TextStyle.Font.Size = plotConfig.labelSize + p.Y.Label.TextStyle.Font.Size = plotConfig.labelSize + p.X.Width = plotConfig.axisWidth + p.Y.Width = plotConfig.axisWidth + p.X.Tick.Width = plotConfig.tickWidth + p.Y.Tick.Width = plotConfig.tickWidth + + if plotConfig.xminStr != "" { + log.Warning("flag --x-min ignored for command box") + } + if plotConfig.xmaxStr != "" { + log.Warning("flag --x-max ignored for command box") + } + if plotConfig.yminStr != "" { + log.Warning("flag --y-min ignored for command box") + } + if plotConfig.ymaxStr != "" { + log.Warning("flag --y-max ignored for command box") + } + + // Save the plot to a PNG file. + if err := p.Save(plotConfig.width*vg.Inch, + plotConfig.height*vg.Inch, config.OutFile); err != nil { + checkError(err) + } + }, +} + +func init() { + plotCmd.AddCommand(boxCmd) + + boxCmd.Flags().Float64P("box-width", "", 0, "box width") + boxCmd.Flags().BoolP("horiz", "", false, "horize box plot") +} diff --git a/csvtk/cmd/helper.go b/csvtk/cmd/helper.go index bbb65f9..6bd3a59 100644 --- a/csvtk/cmd/helper.go +++ b/csvtk/cmd/helper.go @@ -91,7 +91,16 @@ func getFlagNonNegativeInt(cmd *cobra.Command, flag string) int { value, err := cmd.Flags().GetInt(flag) checkError(err) if value < 0 { - checkError(fmt.Errorf("value of flag --%s should be greater than 0", flag)) + checkError(fmt.Errorf("value of flag --%s should be greater than or equal to 0", flag)) + } + return value +} + +func getFlagNonNegativeFloat64(cmd *cobra.Command, flag string) float64 { + value, err := cmd.Flags().GetFloat64(flag) + checkError(err) + if value < 0 { + checkError(fmt.Errorf("value of flag --%s should be greater than or equal to ", flag)) } return value } @@ -457,6 +466,15 @@ func parseCSVfile(cmd *cobra.Command, config Config, file string, parseHeaderRow = false + orderedFieldss := make([]orderedField, len(fields)) + for i, f := range fields { + orderedFieldss[i] = orderedField{field: f, order: fieldsOrder[f]} + } + sort.Sort(orderedFields(orderedFieldss)) + for i, of := range orderedFieldss { + fields[i] = of.field + } + items := make([]string, len(fields)) for i, f := range fields { items[i] = record[f-1] diff --git a/csvtk/cmd/hist.go b/csvtk/cmd/hist.go index dbb1d4d..519de09 100644 --- a/csvtk/cmd/hist.go +++ b/csvtk/cmd/hist.go @@ -61,7 +61,7 @@ var histCmd = &cobra.Command{ plotConfig.ylab = "Count" } if config.OutFile == "-" { - config.OutFile = "hist.png" + config.OutFile = "histogram.png" } if plotConfig.title == "" { plotConfig.title = "Histogram" @@ -83,9 +83,9 @@ var histCmd = &cobra.Command{ f, err = strconv.ParseFloat(d[0], 64) if err != nil { if len(headerRow) > 0 { - checkError(fmt.Errorf("fail to parse float: %s at column %s", d[0], headerRow[0])) + checkError(fmt.Errorf("fail to parse data: %s at column: %s. please choose the right column by flag -f (--data-field)", d[0], headerRow[0])) } else { - checkError(fmt.Errorf("fail to parse float: %s at column %d", d[0], fields[0])) + checkError(fmt.Errorf("fail to parse data: %s at column: %d. please choose the right column by flag -f (--data-field)", d[0], fields[0])) } } v[i] = f diff --git a/csvtk/cmd/line.go b/csvtk/cmd/line.go new file mode 100644 index 0000000..b6c401b --- /dev/null +++ b/csvtk/cmd/line.go @@ -0,0 +1,213 @@ +// Copyright © 2016 Wei Shen +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +package cmd + +import ( + "fmt" + "runtime" + "strconv" + "strings" + + "github.com/gonum/plot" + "github.com/gonum/plot/plotter" + "github.com/gonum/plot/plotutil" + "github.com/gonum/plot/vg" + "github.com/spf13/cobra" +) + +// lineCmd represents the line command +var lineCmd = &cobra.Command{ + Use: "line", + Short: "line plot", + Long: `line plot + +`, + Run: func(cmd *cobra.Command, args []string) { + config := getConfigs(cmd) + plotConfig := getPlotConfigs(cmd) + + files := getFileList(args) + if len(files) > 1 { + checkError(fmt.Errorf("no more than one file should be given")) + } + runtime.GOMAXPROCS(config.NumCPUs) + + lineWidth := vg.Points(getFlagPositiveFloat64(cmd, "line-width")) + dataFieldXStr := getFlagString(cmd, "data-field-x") + if dataFieldXStr == "" { + checkError(fmt.Errorf("flag -x (--data-field-x) needed")) + } + if strings.Index(dataFieldXStr, ",") >= 0 { + checkError(fmt.Errorf("only one field allowed for flag -x (--data-field-x)")) + } + if dataFieldXStr[0] == '-' { + checkError(fmt.Errorf("unselect not allowed for flag -x (--data-field-x)")) + } + + dataFieldYStr := getFlagString(cmd, "data-field-y") + if dataFieldYStr == "" { + checkError(fmt.Errorf("flag -x (--data-field-y) needed")) + } + if strings.Index(dataFieldYStr, ",") >= 0 { + checkError(fmt.Errorf("only one field allowed for flag -y (--data-field-y)")) + } + if dataFieldXStr[0] == '-' { + checkError(fmt.Errorf("unselect not allowed for flag -y (--data-field-y)")) + } + + groupFieldStr := getFlagString(cmd, "group-field") + if len(groupFieldStr) > 0 { + if strings.Index(groupFieldStr, ",") >= 0 { + checkError(fmt.Errorf("only one field allowed for flag --group-field")) + } + if groupFieldStr[0] == '-' { + checkError(fmt.Errorf("unselect not allowed for flag --group-field")) + } + plotConfig.fieldStr = dataFieldXStr + "," + dataFieldYStr + "," + groupFieldStr + } else { + plotConfig.fieldStr = dataFieldXStr + "," + dataFieldYStr + } + + file := files[0] + headerRow, data, fields := parseCSVfile(cmd, config, file, plotConfig.fieldStr, false) + + // ======================================= + + if config.OutFile == "-" { + config.OutFile = "lineplot.png" + } + if plotConfig.title == "" { + plotConfig.title = "Line plot" + } + + groups := make(map[string]plotter.XYs) + var x, y float64 + var err error + var ok bool + var groupName string + for _, d := range data { + x, err = strconv.ParseFloat(d[0], 64) + if err != nil { + if len(headerRow) > 0 { + checkError(fmt.Errorf("fail to parse X value: %s at column: %s. please choose the right column by flag --data-field-x", d[0], headerRow[0])) + } else { + checkError(fmt.Errorf("fail to parse X value: %s at column: %d. please choose the right column by flag --data-field-x", d[0], fields[0])) + } + } + y, err = strconv.ParseFloat(d[1], 64) + if err != nil { + if len(headerRow) > 0 { + checkError(fmt.Errorf("fail to parse Y value: %s at column: %s. please choose the right column by flag --data-field-y", d[1], headerRow[1])) + } else { + checkError(fmt.Errorf("fail to parse Y value: %s at column: %d. please choose the right column by flag --data-field-y", d[1], fields[1])) + } + } + + if len(d) > 2 { + groupName = d[2] + } else { + groupName = "" + } + if _, ok = groups[groupName]; !ok { + groups[groupName] = make(plotter.XYs, 0) + } + groups[groupName] = append(groups[groupName], struct{ X, Y float64 }{X: x, Y: y}) + } + + p, err := plot.New() + if err != nil { + checkError(err) + } + + i := 0 + for g, v := range groups { + lines, points, err := plotter.NewLinePoints(v) + checkError(err) + + lines.Color = plotutil.Color(i) + lines.LineStyle.Dashes = plotutil.Dashes(i) + lines.LineStyle.Width = lineWidth + points.Shape = plotutil.Shape(i) + points.Color = plotutil.Color(i) + i++ + + p.Add(lines, points) + p.Legend.Add(g, lines, points) + } + p.Legend.Padding = vg.Length(lineWidth) + p.Legend.Top = getFlagBool(cmd, "legend-top") + p.Legend.Left = getFlagBool(cmd, "legend-left") + + if plotConfig.ylab == "" { + if len(headerRow) > 0 { + plotConfig.ylab = headerRow[1] + } else { + plotConfig.ylab = "Y Values" + } + } + if plotConfig.xlab == "" { + if len(headerRow) > 0 { + plotConfig.xlab = headerRow[0] + } else { + plotConfig.xlab = "X Values" + } + } + + p.Title.Text = plotConfig.title + p.Title.TextStyle.Font.Size = plotConfig.titleSize + p.X.Label.Text = plotConfig.xlab + p.Y.Label.Text = plotConfig.ylab + p.X.Label.TextStyle.Font.Size = plotConfig.labelSize + p.Y.Label.TextStyle.Font.Size = plotConfig.labelSize + p.X.Width = plotConfig.axisWidth + p.Y.Width = plotConfig.axisWidth + p.X.Tick.Width = plotConfig.tickWidth + p.Y.Tick.Width = plotConfig.tickWidth + + if plotConfig.xminStr != "" { + p.X.Min = plotConfig.xmin + } + if plotConfig.xmaxStr != "" { + p.X.Max = plotConfig.xmax + } + if plotConfig.yminStr != "" { + p.Y.Min = plotConfig.ymin + } + if plotConfig.ymaxStr != "" { + p.Y.Max = plotConfig.ymax + } + + // Save the plot to a PNG file. + if err := p.Save(plotConfig.width*vg.Inch, + plotConfig.height*vg.Inch, config.OutFile); err != nil { + checkError(err) + } + }, +} + +func init() { + plotCmd.AddCommand(lineCmd) + lineCmd.Flags().StringP("data-field-x", "x", "", `column index or column name of X for command line`) + lineCmd.Flags().StringP("data-field-y", "y", "", `column index or column name of Y for command line`) + lineCmd.Flags().Float64P("line-width", "", 1.5, "line-width") + lineCmd.Flags().BoolP("legend-top", "", false, "locate legend along the top edge of the plot") + lineCmd.Flags().BoolP("legend-left", "", false, "locate legend along the left edge of the plot") +} diff --git a/csvtk/cmd/plot.go b/csvtk/cmd/plot.go index 89ce40a..e31d2dc 100644 --- a/csvtk/cmd/plot.go +++ b/csvtk/cmd/plot.go @@ -50,19 +50,19 @@ func init() { plotCmd.PersistentFlags().StringP("group-field", "g", "", `column index or column name of group`) plotCmd.PersistentFlags().StringP("title", "", "", "Figure title") - plotCmd.PersistentFlags().StringP("xlab", "x", "", "x label text") - plotCmd.PersistentFlags().StringP("ylab", "y", "", "y label text") + plotCmd.PersistentFlags().StringP("xlab", "", "", "x label text") + plotCmd.PersistentFlags().StringP("ylab", "", "", "y label text") plotCmd.PersistentFlags().StringP("x-min", "", "", `minimum value of X axis`) plotCmd.PersistentFlags().StringP("x-max", "", "", `maximum value of X axis`) plotCmd.PersistentFlags().StringP("y-min", "", "", `minimum value of Y axis`) plotCmd.PersistentFlags().StringP("y-max", "", "", `maximum value of Y axis`) - plotCmd.PersistentFlags().Float64P("width", "", 8, "Figure width") - plotCmd.PersistentFlags().Float64P("height", "", 4, "Figure height") + plotCmd.PersistentFlags().Float64P("width", "", 6, "Figure width") + plotCmd.PersistentFlags().Float64P("height", "", 4.5, "Figure height") plotCmd.PersistentFlags().IntP("title-size", "", 16, "title font size") - plotCmd.PersistentFlags().IntP("label-size", "", 12, "label font size") + plotCmd.PersistentFlags().IntP("label-size", "", 14, "label font size") plotCmd.PersistentFlags().Float64P("axis-width", "", 1.5, "axis width") plotCmd.PersistentFlags().Float64P("tick-width", "", 1.5, "axis tick width") } @@ -83,7 +83,7 @@ func getPlotConfigs(cmd *cobra.Command) *plotConfigs { if strings.Index(config.groupFieldStr, ",") >= 0 { checkError(fmt.Errorf("only one field allowed for flag --group-field")) } - if config.dataFieldStr[0] == '-' { + if config.groupFieldStr[0] == '-' { checkError(fmt.Errorf("unselect not allowed for flag --group-field")) } config.fieldStr = config.dataFieldStr + "," + config.groupFieldStr diff --git a/csvtk/packaging.sh b/csvtk/packaging.sh index a88dfe1..749ce02 100755 --- a/csvtk/packaging.sh +++ b/csvtk/packaging.sh @@ -1,6 +1,6 @@ #!/usr/bin/env sh -gox -os="windows darwin linux"; +gox -os="windows darwin linux" -arch="386 amd64"; dir=binaries mkdir -p $dir; diff --git a/doc/docs/download.md b/doc/docs/download.md index c2fe901..c318469 100644 --- a/doc/docs/download.md +++ b/doc/docs/download.md @@ -10,6 +10,10 @@ - new feature: `csvtk cut` supports ordered fields output. e.g., `csvtk cut -f 2,1` outputs the 2nd column in from of 1th column. +- new commands: `csvtk plot` can plot three types of plots by subcommands: + - `csvtk plot hist`: histogram + - `csvtk plot box`: boxplot + - `csvtk plot line`: line plot Links: diff --git a/doc/docs/usage.md b/doc/docs/usage.md index 50926d7..7178e55 100644 --- a/doc/docs/usage.md +++ b/doc/docs/usage.md @@ -19,7 +19,7 @@ Usage ``` Another cross-platform, efficient and practical CSV/TSV toolkit -Version: 0.3.6 +Version: 0.3.8 Author: Wei Shen @@ -48,6 +48,7 @@ Available Commands: inter intersection of multiple files join join multiple CSV files by selected fields mutate create new column from selected fields by regular expression + plot plot common figures pretty convert CSV to readable aligned table rename rename column names rename2 rename column names by regular expression @@ -59,6 +60,7 @@ Available Commands: tab2csv convert tabular format to CSV transpose transpose CSV data uniq unique data without sorting + version print version information and check for update Flags: -c, --chunk-size int chunk size of CSV reader (default 50) @@ -72,8 +74,6 @@ Flags: -T, --out-tabs specifies that the output is delimited with tabs. Overrides "-D" -t, --tabs specifies that the input CSV file is delimited with tabs. Overrides "-d" -Use "csvtk [command] --help" for more information about a command. - ``` ## stat @@ -640,6 +640,143 @@ Examples - Sort by number: `csvtk sort -k 1:n` or `csvtk sort -k 1:nr` for reverse number - Complex sort: `csvtk sort -k region -k age:n -k id:nr` +## plot + +Usage + +``` +plot common figures + +Notes: + + 1. File format is determined by the out file (-o/--out-file) suffix. + Supported formats: eps, jpg|jpeg, pdf, png, svg, and tif|tiff + +Usage: + csvtk plot [command] + +Available Commands: + box plot boxplot + hist plot histogram + line line plot + +Flags: + --axis-width float axis width (default 1.5) + -f, --data-field string column index or column name of data (default "1") + -g, --group-field string column index or column name of group + --height float Figure height (default 4.5) + -h, --help help for plot + --label-size int label font size (default 14) + --tick-width float axis tick width (default 1.5) + --title string Figure title + --title-size int title font size (default 16) + --width float Figure width (default 6) + --x-max string maximum value of X axis + --x-min string minimum value of X axis + --xlab string x label text + --y-max string maximum value of Y axis + --y-min string minimum value of Y axis + --ylab string y label text + +``` +***Note that most of the flags of `plot` are global flags of the subcommands +`hist`, `box` and `line`*** + +***File format is determined by the out file (-o/--out-file) suffix. +Supported formats: eps, jpg|jpeg, pdf, png, svg, and tif|tiff*** + +## plot hist + +Usage + +``` +plot histogram + +Usage: + csvtk plot hist [flags] + +Flags: + --bins int number of bins (default 50) + --color-index int color index, 1-7 (default 1) + +``` + +Examples + +- example data + + $ zcat ../testdata/grouped_data.tsv.gz | head -n 5 | csvtk -t pretty + Group Length GC Content + Group A 97 57.73 + Group A 95 49.47 + Group A 97 49.48 + Group A 100 51.00 + +- plot histogram with data of the second column: + `csvtk -t plot hist ../testdata/grouped_data.tsv.gz -f 2` +![histogram.png](testdata/figures/histogram.png) + +## plot box + +Usage + +``` +plot boxplot + +Usage: + csvtk plot box [flags] + +Flags: + --box-width float box width + --horiz horize box plot + +``` + +Examples + +- plot boxplot with data of the "GC Content" (third) column, +group information is the "Group" column. +`csvtk -t plot box ../testdata/grouped_data.tsv.gz -g "Group" -f "GC Content" --width 3` +![boxplot.png](testdata/figures/boxplot.png) +- plot horiz boxplot with data of the "Length" (second) column, +group information is the "Group" column. +`csvtk -t plot box ../testdata/grouped_data.tsv.gz -g "Group" -f "Length" --height 3 --width 5 --horiz --title "Horiz box plot"` +![boxplot2.png](testdata/figures/boxplot2.png) + +## plot line + +Usage + +``` +line plot + +Usage: + csvtk plot line [flags] + +Flags: + -x, --data-field-x string column index or column name of X for command line + -y, --data-field-y string column index or column name of Y for command line + --legend-left locate legend along the left edge of the plot + --legend-top locate legend along the top edge of the plot + --line-width float line-width (default 1.5) + +``` + +Examples + +- example data + + $ head -n 5 ../testdata/xy.tsv + Group X Y + A 0 1 + A 1 1.3 + A 1.5 1.5 + A 2.0 2 + +- plot line plot with X-Y data +`csvtk -t plot line ../testdata/xy.tsv -x X -y Y -g Group` +![lineplot.png](testdata/figures/lineplot.png) +
diff --git a/doc/site b/doc/site index a609caf..101620c 160000 --- a/doc/site +++ b/doc/site @@ -1 +1 @@ -Subproject commit a609caf5f83c6b6c2ef8a5a879b12879714628a4 +Subproject commit 101620c71ad6d65b9b8046bd1d2f17ea0527dfef diff --git a/testdata/figures/boxplot.png b/testdata/figures/boxplot.png new file mode 100644 index 0000000000000000000000000000000000000000..4f369be0aecd63532f0357587739b4c6cf51f3b2 GIT binary patch literal 19057 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 s6RUfdLH85zb%7 literal 0 HcmV?d00001 diff --git a/testdata/figures/boxplot2.png b/testdata/figures/boxplot2.png new file mode 100644 index 0000000000000000000000000000000000000000..e4add1139e1c8c63bd04bf018c119ef54ab5f0be GIT binary patch literal 12083 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 ZJW2c2>U))F2bSRpau*dZWJ=w9@E_A9dr1HQ literal 0 HcmV?d00001 diff --git a/testdata/figures/histogram.png b/testdata/figures/histogram.png new file mode 100644 index 0000000000000000000000000000000000000000..c4fde9a6fc8ab780e07b7e0817842e4b669c1fcd GIT binary patch literal 14286 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 literal 0 HcmV?d00001 diff --git a/testdata/figures/lineplot.png b/testdata/figures/lineplot.png new file mode 100644 index 0000000000000000000000000000000000000000..72452073351858b747af45abe0783528ae2a218a GIT binary patch literal 24886 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 OMkqXdB3CS968JxB3V?_J literal 0 HcmV?d00001 diff --git a/testdata/grouped_data.tsv.gz b/testdata/grouped_data.tsv.gz index 8b8c4e1bb149d1054dac8bcf899f7f2b1a6a96cc..151a494a458bbef030d1802bcabdd37f8bef6572 100644 GIT binary patch literal 27501 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 IXN>~_0KpJBrT_o{ literal 42787 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