visualisation-utils 0.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -3,6 +3,13 @@ visualisation-utils
3
3
 
4
4
  a collection of scripts for standard visualisation tasks
5
5
 
6
+ Installing
7
+ ==========
8
+
9
+ ~~~ .bash
10
+ gem install visualisation-utils
11
+ ~~~
12
+
6
13
  scatter-plot
7
14
  ============
8
15
 
@@ -24,5 +31,16 @@ This incantation will bring up the gnuplot gui with the following graph:
24
31
 
25
32
  ![gui](https://raw.github.com/programmiersportgruppe/visualisation-utils/master/doc/gnuplot-gui.png)
26
33
 
27
-
34
+ TODO
35
+ ====
36
+
37
+ * Overriding of autoscale
38
+ * Create nice PNGs
39
+ * Line plots
40
+ * Changing changing the size of the dots
41
+ * Secondary y-axis
42
+ * Bar chart single series
43
+ * Bar chart multiple series
44
+ * Discrete y-values, e.g. to visualise events over time
45
+ * Histogram plotting
28
46
 
data/Rakefile ADDED
@@ -0,0 +1,5 @@
1
+ task :default => :build
2
+
3
+ task :build do
4
+ system "gem build visualisation-utils.gemspec"
5
+ end
data/bin/overlay ADDED
@@ -0,0 +1,16 @@
1
+ #/usr/bin/env bash
2
+
3
+ # Overlaying to pictures and adding white background
4
+
5
+ FOREGROUND=$1
6
+ BACKGROUND=$2
7
+ set -e
8
+ set -u
9
+
10
+ basename="$(basename "$FOREGROUND")"
11
+ SIGNED=`dirname "$FOREGROUND"`"/${basename%.*}.branded.png"
12
+
13
+ convert "${FOREGROUND}" "${BACKGROUND}" -gravity center -compose DstOver -composite -background white -format png /tmp/output.png
14
+ convert /tmp/output.png -background white -flatten -format png "$SIGNED"
15
+
16
+
data/bin/scatter-plot CHANGED
@@ -9,9 +9,16 @@ PLOT_FILE_NAME="/tmp/plot-"+`date "+%s"`.strip+".plt"
9
9
  banner "scatter-plot takes whitespace separated tables from stdin and renders them using gnuplot"
10
10
  opt :outfile, "Output file name", :type => String, :short => 'o'
11
11
  opt :legends, "Legend for columns, pipe separated list", :type => String, :short => 'l'
12
+ opt :plot_styles, "Style of plot, comma separated list, values as expected by gnuplot, e.g. lines, points, linespoints, defaults to points", :type => String
13
+ opt :axis_labels, "Labels for axes, pipe separated list", :type => String
14
+ opt :axes, "Axes used for the respective columns, e.g. (1|possible value are ", :type => String
12
15
  opt :numc, "Number of data columns", :type => Integer, :short => 'c'
13
16
  opt :debug, "debug"
14
17
  opt :title, "Title", :type=> String, :short => 't'
18
+ opt :font, "Font", :type => String, :short => 'f'
19
+ opt :time, "Time format for time series data, strftime expression", :type => String
20
+ opt :ranges, "A list comma separated pairs of gnuplot range-expressions, e.g. xrange [-10:10], yrange[0:40], y2range [0:1]", type:String
21
+ opt :extra_header, "Extra commands to be put in the header of the gnuplot file", :type => String
15
22
  end
16
23
 
17
24
  title = @opts[:title] || ""
@@ -20,19 +27,27 @@ title = @opts[:title] || ""
20
27
  input = `cat`
21
28
  File.open(DATA_FILE_NAME, "w"){|f| f.write(input)}
22
29
 
23
- numc_input=input.split(/\n/)[0].split(/\w*/).length - 1
30
+ numc_input=input.split(/\n/)[0].split(/\s+/).length - 1
31
+ puts "Detected numc y-columns #{numc_input}"
32
+
24
33
 
25
34
  numc = @opts[:numc] || numc_input
26
35
 
36
+ axis_labels = (@opts[:axis_labels] || " | ").split("|")
27
37
 
28
38
  legends = (@opts[:legends] ? @opts[:legends].strip().split(/,/) : (1..(numc)).map{|x| ""}).map{|x| x.strip}
29
39
 
30
- font = "Futura"
31
- font_size = "12"
40
+ axes = @opts[:axes] ? @opts[:axes].split("|") : [1] * legends.length
41
+
42
+ plot_styles = @opts[:plot_styles] ? @opts[:plot_styles].strip().split(/,/) : [ "points" ] * legends.length
32
43
 
33
- using_list = legends.zip(2..100).map{|text, index| "'#{DATA_FILE_NAME}' using 1:#{index} title \"#{text}\"" }.join(", ")
44
+ ranges = @opts[:ranges] ? @opts[:ranges].split(",").map{ |r| "set #{r}"}.join("\n") : ""
34
45
 
46
+ font = @opts[:font] || "Futura"
47
+ font_size = "12"
48
+ using_list = legends.zip((2..100).to_a, axes, plot_styles).map{|text, index, yaxis, plot_style| "'#{DATA_FILE_NAME}' using 1:#{index} title \"#{text}\" with #{plot_style} ps 2.0 lw 2.0 axes x1y#{yaxis}"}.join(", ")
35
49
 
50
+ extra_header = @opts[:extra_header] || ""
36
51
 
37
52
  if (@opts[:outfile])
38
53
  filename = @opts[:outfile]
@@ -45,12 +60,17 @@ if (@opts[:outfile])
45
60
  EOF
46
61
  elsif (extension == "eps")
47
62
  terminal=<<EOF
48
- set term epscairo font '#{font},#{font_size}'
63
+ set term epscairo size 1200,800 font '#{font},#{font_size}'
49
64
  set output '#{filename}'
50
65
  EOF
51
66
  elsif (extension == "pdf")
52
67
  terminal=<<EOF
53
- set term pdfcairo font '#{font},#{font_size}'
68
+ set term pdfcairo size 22cm,14cm font '#{font},#{font_size}'
69
+ set output '#{filename}'
70
+ EOF
71
+ elsif (extension == "svg")
72
+ terminal=<<EOF
73
+ set term svg size 1200,800 font '#{font},#{font_size}'
54
74
  set output '#{filename}'
55
75
  EOF
56
76
  else
@@ -60,10 +80,39 @@ EOF
60
80
 
61
81
  end
62
82
 
83
+ if (@opts[:time])
84
+ timeExpr=@opts[:time]
85
+ time=<<EOF
86
+ set xdata time
87
+ set timefmt "#{timeExpr}"
88
+ set format x "%H:%M"
89
+ set autoscale x
90
+ EOF
91
+ else
92
+ time=""
93
+ end
94
+
95
+
63
96
  script = <<EOF
64
97
  #{terminal}
65
- set key top left
98
+ #{axis_labels.map{ | axis | pair=axis.split(":"); "set #{pair[0]}label '#{pair[1]}';"}.join("\n")}
99
+ set key outside
100
+ set key left top
101
+ #set offsets 1, 1, 1, 0
102
+ set style line 1 lc rgb '#8b1a0e' pt 1 ps 1 lt 1 lw 2 # --- red
103
+ set style line 2 lc rgb '#5e9c36' pt 6 ps 1 lt 1 lw 2 # --- green
104
+ set style line 11 lc rgb '#808080' lt 1
105
+ set border 3 back ls 11
106
+ set tics nomirror
107
+ set style line 12 lc rgb '#808080' lt 0 lw 1
108
+ set grid back ls 12
109
+ set y2tics
110
+ #{extra_header}
111
+
112
+ #{ranges}
113
+
66
114
  set title "#{title}"
115
+ #{time}
67
116
  plot #{using_list}
68
117
 
69
118
  EOF
@@ -0,0 +1,23 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'visualisation-utils'
3
+ s.summary = 'utilities for quick visualisation'
4
+ s.description = 'visualisation-utils provides a number of utilities
5
+ for visualising data from the command line.'
6
+ s.version = '0.2'
7
+ s.platform = Gem::Platform::RUBY
8
+
9
+ s.files = ['bin/scatter-plot']
10
+
11
+ s.bindir = 'bin'
12
+
13
+ s.files = `git ls-files`.split("\n")
14
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
15
+
16
+ s.author = 'Felix Leipold'
17
+ s.email = ''
18
+ s.homepage = 'https://github.com/programmiersportgruppe/visualisation-utils'
19
+
20
+
21
+ s.add_dependency('trollop')
22
+ end
23
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: visualisation-utils
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: '0.2'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-11 00:00:00.000000000Z
12
+ date: 2013-07-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: trollop
16
- requirement: &2153124320 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,20 +21,29 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2153124320
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  description: ! "visualisation-utils provides a number of utilities\n for
26
31
  visualising data from the command line."
27
32
  email: ''
28
33
  executables:
34
+ - overlay
29
35
  - scatter-plot
30
36
  extensions: []
31
37
  extra_rdoc_files: []
32
38
  files:
33
39
  - README.md
40
+ - Rakefile
41
+ - bin/overlay
34
42
  - bin/scatter-plot
35
43
  - doc/gnuplot-gui.png
36
44
  - test-data/test-two-column.dat
37
45
  - test-data/test.dat
46
+ - visualisation-utils.gemspec
38
47
  homepage: https://github.com/programmiersportgruppe/visualisation-utils
39
48
  licenses: []
40
49
  post_install_message:
@@ -55,7 +64,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
64
  version: '0'
56
65
  requirements: []
57
66
  rubyforge_project:
58
- rubygems_version: 1.8.15
67
+ rubygems_version: 1.8.24
59
68
  signing_key:
60
69
  specification_version: 3
61
70
  summary: utilities for quick visualisation