graphkit 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e9da30db14973ca7a94fceb0e1e6ba8cb69adabb
4
- data.tar.gz: 50edafcfcb69c93ec85ef6f7427d346127bb25be
3
+ metadata.gz: 30e1a05bbf7cc899ca1c2e8682de4b93dd6f3870
4
+ data.tar.gz: 9a8d784fc19bac844f949b7ff49ef1bef9994669
5
5
  SHA512:
6
- metadata.gz: 822ae424641869f07001bb0ee4ac324173a6c361069c0d4851b57898c858264a8a119745a27c126f4930b2cf5a6a5feeb72c7b10b54b94f37b323d508502ab40
7
- data.tar.gz: fd6ebb58c3a3875f2ca653cdee4445d3e65bab375dcfa05b1404bf48bdc891e5eda81eb607e8964ad281e07d7949f8bee838fdf206adb2f4ca82f8edf3ad3930
6
+ metadata.gz: 872a13313d9af37ccec3636ab625295a03c0523acc5964eacd93cd12779499b01991f5ab4c3be0ba95051d7ee493883dc2ef979b702afa454bc2fdd91e511850
7
+ data.tar.gz: a3c15244935e8dc67af1b53bd937f7ad7016e591415810a13e5f58fdc715b449ac761f5bdb9d6d8044e055b65c639c2c15cf302fd500e566ab36b690b33546c8
data/Gemfile CHANGED
@@ -3,6 +3,7 @@ source "http://rubygems.org"
3
3
  # Example:
4
4
  # gem "activesupport", ">= 2.3.5"
5
5
  gem "rubyhacks", ">= 0.1.0"
6
+ #gem 'sys-proctable'
6
7
 
7
8
  # Add dependencies to develop your gem here.
8
9
  # Include everything needed to run rake, tests, features, etc.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.2
1
+ 0.3.0
data/graphkit.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: graphkit 0.2.2 ruby lib
5
+ # stub: graphkit 0.3.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "graphkit"
9
- s.version = "0.2.2"
9
+ s.version = "0.3.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Edmund Highcock"]
14
- s.date = "2014-03-07"
14
+ s.date = "2014-03-17"
15
15
  s.description = "A GraphKit is a device independent intelligent data container that allows the easy sharing, combining and plotting of graphic data representations. Easily created from data, they can be output in a variety of formats using packages such as gnuplot. "
16
16
  s.email = "edmundhighcock@sourceforge.net"
17
17
  s.extra_rdoc_files = [
@@ -88,6 +88,7 @@ class GraphKit
88
88
  end
89
89
  end
90
90
  class GnuplotSetOptions < KitHash
91
+ attr_accessor :multiplot_following
91
92
  alias :hash_key :key
92
93
  undef :key
93
94
  QUOTED = [ "title", "output", "xlabel", "ylabel", "zlabel", "x2label", "y2label", "z2label" ]
@@ -103,7 +104,7 @@ class GnuplotSetOptions < KitHash
103
104
  isosamples key label lmargin
104
105
  loadpath locale log logscale
105
106
  macros mapping margin missing
106
- mouse multiplot mx2tics mxtics
107
+ mouse mx2tics mxtics
107
108
  my2tics mytics mztics object
108
109
  nosurface
109
110
  offsets origin output palette
@@ -122,7 +123,8 @@ class GnuplotSetOptions < KitHash
122
123
  y2zeroaxis ydata ydtics ylabel
123
124
  ymtics yrange ytics yzeroaxis
124
125
  zdata zdtics zero zeroaxis
125
- zlabel zmtics zrange ztics].map{|s| s.to_sym}
126
+ zlabel zmtics zrange ztics
127
+ multiplot ].map{|s| s.to_sym}
126
128
  # p instance_methods.sort
127
129
  GNUPLOT_SETS.each do |opt|
128
130
  define_method(opt + "=".to_sym) do |str|
@@ -141,12 +143,21 @@ class GnuplotSetOptions < KitHash
141
143
  end
142
144
 
143
145
  def apply(io)
146
+ io << "set term #{GNUPLOT_DEFAULT_TERM}\n" unless self[:term] or self.multiplot_following
144
147
  self.each do |var,val|
145
148
  next unless val
149
+ next if self.multiplot_following and ["term", "output"].include? var.to_s
150
+ next if var.to_s == "multiplot"
151
+ apply_option(io, var, val)
152
+ end
153
+ apply_option(io, :multiplot, self[:multiplot]) if self[:multiplot]
154
+ end
155
+
156
+ def apply_option(io, var, val)
146
157
  if val == "unset"
147
158
  #eputs "Unsetting #{var}"
148
159
  io << "unset #{var}\n"
149
- next
160
+ return
150
161
  end
151
162
  if var.to_s == 'log_axis'
152
163
  var = 'log'
@@ -161,8 +172,6 @@ class GnuplotSetOptions < KitHash
161
172
  else
162
173
  io << "set #{var} #{val}\n"
163
174
  end
164
- end
165
- io << "set term #{GNUPLOT_DEFAULT_TERM}\n" unless self[:term]
166
175
  end
167
176
 
168
177
 
@@ -291,45 +300,55 @@ end
291
300
  apply_gnuplot_options(options)
292
301
  apply_graphkit_standard_options_to_gnuplot
293
302
  check_integrity
294
- Gnuplot.open(true) do |io|
295
- self.pid = io.pid
296
- gnuplot_sets.apply(io)
297
- gnuplot_variables.apply(io)
298
- case naxes
299
- when 1,2
300
- io << "plot "
301
- when 3,4
302
- io << "splot "
303
- end
304
- imax = data.size - 1
305
- data.each_with_index do |dk,i|
306
- next if i>0 and compress_datakits
307
- dk.gnuplot_plot_options.with ||= dk.with #b.c.
308
- dk.gnuplot_plot_options.title ||= dk.title #b.c.
309
- dk.gnuplot_plot_options.apply(io)
310
- #p 'imax', imax, i, i == imax
311
- next if compress_datakits
312
- io << ", " unless i == imax
313
- end
314
- io << "\n"
315
- data.each_with_index do |dk,i|
316
- dk.gnuplot(io)
317
- unless compress_datakits and i<imax
318
- io << "e\n\n"
319
- else
320
- io << "\n\n"
321
- end
322
- end
323
- (STDIN.gets) if live
303
+ if options[:io]
304
+ send_gnuplot_commands(io)
305
+ else
306
+ Gnuplot.open(true) do |io|
307
+ send_gnuplot_commands(io)
308
+ (STDIN.gets) if live
309
+ end
324
310
  end
325
311
  end
312
+
313
+ def send_gnuplot_commands(io)
314
+ self.pid = io.pid
315
+ gnuplot_sets.apply(io)
316
+ gnuplot_variables.apply(io)
317
+ case naxes
318
+ when 1,2
319
+ io << "plot "
320
+ when 3,4
321
+ io << "splot "
322
+ end
323
+ imax = data.size - 1
324
+ data.each_with_index do |dk,i|
325
+ next if i>0 and compress_datakits
326
+ dk.gnuplot_plot_options.with ||= dk.with #b.c.
327
+ dk.gnuplot_plot_options.title ||= dk.title #b.c.
328
+ dk.gnuplot_plot_options.apply(io)
329
+ #p 'imax', imax, i, i == imax
330
+ next if compress_datakits
331
+ io << ", " unless i == imax
332
+ end
333
+ io << "\n"
334
+ data.each_with_index do |dk,i|
335
+ dk.gnuplot(io)
336
+ unless compress_datakits and i<imax
337
+ io << "e\n\n"
338
+ else
339
+ io << "\n\n"
340
+ end
341
+ end
342
+ end
326
343
 
327
344
  def close
328
345
  logf :close
329
346
  begin
347
+ #require 'sys/proctable'
348
+ #p Sys::ProcTable.ps.select{ |pe| pe.ppid == pid }
330
349
  Process.kill('TERM', pid) if pid
331
350
  rescue => err
332
- puts err
351
+ puts err, pid
333
352
  end
334
353
  self.pid = nil
335
354
  end
@@ -459,6 +478,8 @@ end
459
478
 
460
479
  def gnuplot_write(file_name, options={})
461
480
  logf :gnuplot_write
481
+ old_gp_term = gp.term
482
+ old_gp_output = gp.output
462
483
  if file_name
463
484
  gp.output = file_name
464
485
  unless gp.term or options[:terminal]
@@ -497,6 +518,8 @@ end
497
518
  raise 'ps2eps failed' unless system "ps2eps #{name}.ps"
498
519
  end
499
520
  # ep file_name
521
+ gp.term = old_gp_term
522
+ gp.output = old_gp_output
500
523
  return File.basename(file_name, File.extname(file_name))
501
524
  end
502
525
 
@@ -531,6 +554,33 @@ EOF
531
554
 
532
555
 
533
556
 
557
+ class MultiWindow
558
+
559
+ def method_missing(meth, *args)
560
+ if args[-1].kind_of? Hash
561
+ options = args.pop
562
+ else
563
+ options = {}
564
+ end
565
+ raise "Nothing to plot: size = 0" if size==0
566
+ self[0].gp.multiplot = "layout #{size},1"
567
+ for i in 1...self.size
568
+ self[i].gp.multiplot_following = true
569
+ end
570
+ Gnuplot.open(true) do |io|
571
+ options[:io] = io
572
+ each do |gk|
573
+ #p gk.to_s
574
+ gk
575
+ gk.send(meth, *args, options)
576
+ end
577
+ options.delete(:io)
578
+ end
579
+ for i in 1...self.size
580
+ self[i].multiplot = false
581
+ end
582
+ end
583
+ end
534
584
 
535
585
 
536
586
  end
data/lib/graphkit.rb CHANGED
@@ -274,6 +274,12 @@ end
274
274
 
275
275
 
276
276
  class GraphKit < KitHash
277
+
278
+
279
+ class MultiWindow < Array
280
+
281
+ end
282
+
277
283
 
278
284
 
279
285
  include Kit
@@ -905,70 +911,6 @@ require 'graphkit/vtk_legacy_ruby.rb'
905
911
 
906
912
  if $0 == __FILE__
907
913
 
908
- a = GraphKit.autocreate({x: {data: [1,3,5,6], units: 'feet', title: 'Height'}})
909
- a.gnuplot
910
- gets
911
- a.close
912
- a = CodeRunner::GraphKit.autocreate({x: {data: [2, 5, 11, 22], units: 'years', title: 'Age'}, y: {data: [1,3,5,6], units: 'feet', title: 'Height'}})
913
-
914
- puts a.pretty_inspect
915
-
916
- p a.title
917
- p a.label
918
- p a.chox
919
- p a.xlabel
920
- p a.yunits
921
-
922
- # a.gnuplot
923
- # gets
924
- # a.close
925
- a.data[0].with = 'lp'
926
- datakit = a.data[0].dup
927
- datakit.axes[:y].data.map!{|value| value * 0.85}
928
- datakit.title += ' of women'
929
- a.data.push datakit
930
- a.data[0].title += ' of men'
931
- pp a
932
- a.gnuplot
933
- gets
934
- a.close
935
- # Gnuplot.open{a.to_gnuplot}
936
-
937
- b = CodeRunner::GraphKit.autocreate({x: {data: [2, 5, 11, 22], units: 'years', title: 'Age'}, y: {data: [1,3,5,6], units: 'feet', title: 'Height'}, z: {data: [2,4,8,12], units: 'stone', title: 'Weight'}})
938
- b.data[0].modify({with: 'lp'})
939
- pp b
940
- # d = b.data[0].f.data_for_gnuplot(2)
941
- # p d
942
- # p d[0,1]
943
- # d.delete([0,0])
944
- # p d
945
- # p d[1,1]
946
- # p d[1,2]
947
- # d = SparseTensor.new(3)
948
- # p d
949
- # p d[0,1,4]
950
- # p d[3, 4,6]
951
- #
952
- b.gnuplot
953
- gets
954
- b.close
955
- b.gnuplot_write('heights.ps')
956
-
957
- p b.data[0].plot_area_size
958
-
959
- c = SparseTensor.new(3)
960
- c[1,3,9]= 4
961
- c[3,3,34] = 4.346
962
- c[23, 234, 293] = 9.234
963
-
964
- p c
965
-
966
- d = SparseTensor.new(3)
967
- d[1,3,9]= 4
968
- d[3,3,34] = 4.346
969
- d[23, 234, 294] = 9.234
970
-
971
- p c + d
972
914
 
973
915
  end
974
916
 
@@ -1,7 +1,82 @@
1
1
  require 'helper'
2
2
 
3
3
  class TestGraphkit < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
6
- end
4
+
5
+ def test_basic
6
+ a = GraphKit.autocreate({x: {data: [1,3,5,6], units: 'feet', title: 'Height'}})
7
+ #a.gnuplot
8
+ #gets
9
+ a.close
10
+ a = GraphKit.autocreate({x: {data: [2, 5, 11, 22], units: 'years', title: 'Age'}, y: {data: [1,3,5,6], units: 'feet', title: 'Height'}})
11
+
12
+ puts a.pretty_inspect
13
+
14
+ p a.title
15
+ p a.label
16
+ p a.chox
17
+ p a.xlabel
18
+ p a.yunits
19
+
20
+ # a.gnuplot
21
+ # gets
22
+ # a.close
23
+ a.data[0].with = 'lp'
24
+ datakit = a.data[0].dup
25
+ datakit.axes[:y].data.map!{|value| value * 0.85}
26
+ datakit.title += ' of women'
27
+ a.data.push datakit
28
+ a.data[0].title += ' of men'
29
+ pp a
30
+ #a.gnuplot
31
+ #gets
32
+ a.close
33
+ # Gnuplot.open{a.to_gnuplot}
34
+
35
+ b = GraphKit.autocreate({x: {data: [2, 5, 11, 22], units: 'years', title: 'Age'}, y: {data: [1,3,5,6], units: 'feet', title: 'Height'}, z: {data: [2,4,8,12], units: 'stone', title: 'Weight'}})
36
+ b.data[0].modify({with: 'lp'})
37
+ pp b
38
+ # d = b.data[0].f.data_for_gnuplot(2)
39
+ # p d
40
+ # p d[0,1]
41
+ # d.delete([0,0])
42
+ # p d
43
+ # p d[1,1]
44
+ # p d[1,2]
45
+ # d = SparseTensor.new(3)
46
+ # p d
47
+ # p d[0,1,4]
48
+ # p d[3, 4,6]
49
+ #
50
+ #b.gnuplot
51
+ #gets
52
+ b.close
53
+ b.gnuplot_write('heights.ps')
54
+
55
+ p b.data[0].plot_area_size
56
+
57
+ c = SparseTensor.new(3)
58
+ c[1,3,9]= 4
59
+ c[3,3,34] = 4.346
60
+ c[23, 234, 293] = 9.234
61
+
62
+ p c
63
+
64
+ d = SparseTensor.new(3)
65
+ d[1,3,9]= 4
66
+ d[3,3,34] = 4.346
67
+ d[23, 234, 294] = 9.234
68
+
69
+ p c + d
70
+
71
+ multiplot = GraphKit::MultiWindow.new
72
+ multiplot.push a
73
+ multiplot.push b
74
+
75
+
76
+ pp multiplot
77
+
78
+ #multiplot.gnuplot
79
+ multiplot.gnuplot_write('multiplot.ps')
80
+ end
81
+
7
82
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edmund Highcock
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-07 00:00:00.000000000 Z
11
+ date: 2014-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubyhacks