numo-gnuplot 0.1.7 → 0.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e87eaed8bca276f54c5fe06d2e009ceeb3a5355a
4
- data.tar.gz: 6f26b92d3cb90a633703b4392dbd0adb60ff070b
3
+ metadata.gz: e8bcac7c2ba2e8b6312acd20b52748afd86ddeb2
4
+ data.tar.gz: c246dfd861b0a58a83a0b3a41f5868de6b4b4c29
5
5
  SHA512:
6
- metadata.gz: 2c6aaed522a0cdd5386afc91a40f26c3d51030d5aa31b3f9f3e535febf0abd6895aea67be8bdede43774ffae97d8b4f7590b93098b12854de12b4bb0b8a5b0b8
7
- data.tar.gz: e6d06e0c9b00554eb7194b5284ea2c2c5f960810a2dfb3a652e6006028c95ea88f57f1b2ffd50688465cd1a1ce1517dcc308f0fc3416d219879825b31d8cc04b
6
+ metadata.gz: 16c972884c66c7ea7e85714ea53eb2482f4907eeed485d6287c1f251c06dd4031adf7bfc76d10ff059d8242ef15d63ad961e9d66c140d996b3cdb85c8e4e8080
7
+ data.tar.gz: a9408c167e56b22303cc77bb9b363be2b672f09031ea5465077918c8a40f3607f7153c02db739b390aad61ad62cf76888b20a98a0a98b9e831d06c886a0ab673
data/README.md CHANGED
@@ -5,6 +5,8 @@
5
5
  * [RubyGems site](https://rubygems.org/gems/numo-gnuplot)
6
6
  * [API doc](http://www.rubydoc.info/gems/numo-gnuplot/Numo/Gnuplot)
7
7
 
8
+ * Visit [Demo page](https://github.com/ruby-numo/numo-gnuplot-demo).
9
+
8
10
  Although there are many [other Gnuplot interface libraries for Ruby](https://github.com/ruby-numo/gnuplot#related-work),
9
11
  none of them have so simple interface as to show an XY data plot by just typing:
10
12
 
@@ -178,6 +180,7 @@ Numo::Gnuplot class methods succeeded from Gnuplot commands:
178
180
 
179
181
  * clear
180
182
  * exit
183
+ * fit(*args)
181
184
  * help(topic)
182
185
  * load(filename)
183
186
  * pause(*args)
@@ -190,6 +193,7 @@ Numo::Gnuplot class methods succeeded from Gnuplot commands:
190
193
  * show(option)
191
194
  * splot(*args)
192
195
  * unset(*options)
196
+ * update(*files)
193
197
 
194
198
  Numo::Gnuplot class methods renamed from Gnuplot commands:
195
199
 
@@ -198,11 +202,13 @@ Numo::Gnuplot class methods renamed from Gnuplot commands:
198
202
 
199
203
  Numo::Gnuplot-specific methods:
200
204
 
201
- * debug_off -- turn off debug print
202
- * debug_on -- turn on debug print
203
- * output(filename,*opts) -- output current plot to file. This invokes the next commands;
205
+ * debug_off -- turn off debug print.
206
+ * debug_on -- turn on debug print.
207
+ * run(command_line) -- send command-line string to Gnuplot directly.
208
+ * output(filename,[term,*opts]) -- output current plot to file. If term is omitted, an extension in filename is regarded as a term name. This invokes the next commands;
204
209
  ```ruby
205
- set terminal:[ext,*opts], output:filename; refresh
210
+ set terminal:[term,*opts]
211
+ set output:filename; refresh
206
212
  ```
207
213
  * var(name) -- returns variable content in the Gnuplot context.
208
214
 
data/examples/Rakefile ADDED
@@ -0,0 +1,3 @@
1
+ require "rake/clean"
2
+
3
+ CLEAN.include %w[*.png tmp.dat]
data/examples/all.rb CHANGED
@@ -4,7 +4,7 @@ require "numo/gnuplot"
4
4
  gp = Numo.gnuplot
5
5
  #gp.debug_on
6
6
 
7
- puts "enter key to continue"
7
+ puts "Hit enter key to continue"
8
8
 
9
9
  files = Dir.glob("ex*.rb").sort
10
10
  files.each do |frb|
data/examples/ex011.rb CHANGED
@@ -12,11 +12,11 @@ x += df.zeros(n,1)
12
12
  y += df.zeros(1,n)
13
13
 
14
14
  Numo.gnuplot do
15
- set title:'3D plot of XYZ data',
16
- palette:{rgbformula:[22,13,-31]},
17
- dgrid3d:[60,60],
18
- xlabel:'x',
19
- ylabel:'y',
20
- zlabel:'sin(r)/r'
15
+ set title:'3D plot of XYZ data'
16
+ set palette:{rgbformula:[22,13,-31]}
17
+ set dgrid3d:[60,60]
18
+ set xlabel:'x'
19
+ set ylabel:'y'
20
+ set zlabel:'sin(r)/r'
21
21
  splot x,y,z, w:'pm3d', t:'sin(r)/r'
22
22
  end
data/lib/numo/gnuplot.rb CHANGED
@@ -14,19 +14,20 @@ module Numo
14
14
  end
15
15
  module_function :noteplot
16
16
 
17
+ class GnuplotError < StandardError; end
18
+
17
19
  class Gnuplot
18
20
 
19
- VERSION = "0.1.7"
21
+ VERSION = "0.2.0"
20
22
  POOL = []
21
23
  DATA_FORMAT = "%.7g"
22
24
 
23
- class GnuplotError < StandardError; end
24
-
25
25
  def self.default
26
26
  POOL[0] ||= self.new
27
27
  end
28
28
 
29
29
  class NotePlot
30
+
30
31
  def initialize(&block)
31
32
  if block.nil?
32
33
  raise ArgumentError,"block is needed"
@@ -40,7 +41,8 @@ class Gnuplot
40
41
  # output SVG to tmpfile
41
42
  gp = Gnuplot.default
42
43
  gp.reset
43
- gp.set terminal:'svg', output:tempfile_svg.path
44
+ gp.set terminal:'svg'
45
+ gp.output:tempfile_svg.path
44
46
  gp.instance_eval(&@block)
45
47
  gp.unset 'output'
46
48
  svg = File.read(tempfile_svg.path)
@@ -73,19 +75,20 @@ class Gnuplot
73
75
 
74
76
  # draw 2D functions and data.
75
77
  def plot(*args)
76
- _plot_splot("plot",args)
78
+ contents = parse_plot_args(PlotItem,args)
79
+ _plot_splot("plot",contents)
77
80
  nil
78
81
  end
79
82
 
80
83
  # draws 2D projections of 3D surfaces and data.
81
84
  def splot(*args)
82
- _plot_splot("splot",args)
85
+ contents = parse_plot_args(SPlotItem,args)
86
+ _plot_splot("splot",contents)
83
87
  nil
84
88
  end
85
89
 
86
- def _plot_splot(cmd,args)
87
- contents = parse_plot_args(cmd,args)
88
- r = contents.shift.map{|x|"[#{x.begin}:#{x.end}] "}.join
90
+ def _plot_splot(cmd,contents)
91
+ r = contents.shift.map{|x| "#{x} "}.join
89
92
  c = contents.map{|x| x.cmd_str}.join(",")
90
93
  d = contents.map{|x| x.data_str}.join
91
94
  run "#{cmd} #{r}#{c}", d
@@ -94,37 +97,49 @@ class Gnuplot
94
97
  private :_plot_splot
95
98
 
96
99
  # replot is not recommended, use refresh
97
- def replot
98
- run "replot\n#{@last_data}"
100
+ def replot(arg=nil)
101
+ run "replot #{arg}\n#{@last_data}"
102
+ nil
103
+ end
104
+
105
+ # The `fit` command can fit a user-supplied expression to a set of
106
+ # data points (x,z) or (x,y,z), using an implementation of the
107
+ # nonlinear least-squares (NLLS) Marquardt-Levenberg algorithm.
108
+ def fit(*args)
109
+ range, items = parse_fit_args(args)
110
+ r = range.map{|x| "#{x} "}.join
111
+ c = items.cmd_str
112
+ puts send_cmd("fit #{r}#{c}")
99
113
  nil
100
114
  end
101
115
 
116
+ # This command writes the current values of the fit parameters into
117
+ # the given file, formatted as an initial-value file (as described
118
+ # in the `fit`section). This is useful for saving the current
119
+ # values for later use or for restarting a converged or stopped fit.
120
+ def update(*filenames)
121
+ puts send_cmd("update "+filenames.map{|f| OptArg.squote(f)}.join(" "))
122
+ end
123
+
124
+ # This command prepares a statistical summary of the data in one or
125
+ # two columns of a file.
126
+ def stats(filename,*args)
127
+ fn = OptArg.squote(filename)
128
+ opt = OptArg.parse(*args)
129
+ puts send_cmd "stats #{fn} #{opt}"
130
+ end
131
+
102
132
  # The `set` command is used to set _lots_ of options.
103
133
  def set(*args)
104
- _set_unset("set",args)
134
+ run "set #{OptArg.parse(*args)}"
105
135
  nil
106
136
  end
107
137
 
108
138
  # The `unset` command is used to return to their default state.
109
139
  def unset(*args)
110
- _set_unset("unset",args)
111
- nil
112
- end
113
-
114
- def _set_unset(cmd,args)
115
- args.each do |a|
116
- case a
117
- when Hash
118
- a.each do |k,v|
119
- run "#{cmd} #{OptArg.parse_kv(k,v)}"
120
- end
121
- else
122
- run "#{cmd} #{a}"
123
- end
124
- end
140
+ run "unset #{OptArg.parse(*args)}"
125
141
  nil
126
142
  end
127
- private :_set_unset
128
143
 
129
144
  # The `help` command displays built-in help.
130
145
  def help(s=nil)
@@ -132,8 +147,8 @@ class Gnuplot
132
147
  end
133
148
 
134
149
  # The `show` command shows their settings.
135
- def show(x)
136
- puts send_cmd "show #{x}"
150
+ def show(*args)
151
+ puts send_cmd "show #{OptArg.parse(*args)}"
137
152
  end
138
153
 
139
154
  # The `reset` command causes all graph-related options that can be
@@ -156,7 +171,7 @@ class Gnuplot
156
171
 
157
172
  # The `load` command executes each line of the specified input file.
158
173
  def load(filename)
159
- send_cmd "load '#{filename}'"
174
+ run "load #{OptArg.squote(filename)}"
160
175
  nil
161
176
  end
162
177
 
@@ -215,16 +230,19 @@ class Gnuplot
215
230
 
216
231
  # output current plot to file with terminal setting from extension
217
232
  # (not Gnuplot command)
218
- def output(filename,*opts)
219
- if /\.(\w+)$/ =~ filename
220
- ext = $1
221
- ext = KNOWN_EXT[ext]||ext
222
- set terminal:[ext,*opts], output:filename
223
- refresh
224
- unset :terminal, :output
225
- else
233
+ def output(filename,term=nil,*opts)
234
+ if term.nil? && /\.(\w+)$/ =~ filename
235
+ term = $1
236
+ end
237
+ term = KNOWN_EXT[term] || term
238
+ if term.nil?
226
239
  kernel_raise GnuplotError,"file extension is not given"
227
240
  end
241
+ set terminal:[term,*opts]
242
+ set output:filename
243
+ refresh
244
+ unset :terminal
245
+ unset :output
228
246
  end
229
247
 
230
248
 
@@ -238,13 +256,17 @@ class Gnuplot
238
256
  @debug = false
239
257
  end
240
258
 
259
+ # send command-line string to Gnuplot directly
260
+ def send(cmd)
261
+ puts send_cmd(cmd)
262
+ end
263
+
241
264
  #other_commands = %w[
242
265
  # bind
243
266
  # call
244
267
  # cd
245
268
  # do
246
269
  # evaluate
247
- # fit
248
270
  # history
249
271
  # if
250
272
  # print
@@ -252,10 +274,8 @@ class Gnuplot
252
274
  # reread
253
275
  # save
254
276
  # shell
255
- # stats
256
277
  # system
257
278
  # test
258
- # update
259
279
  # while
260
280
  #]
261
281
 
@@ -269,16 +289,20 @@ class Gnuplot
269
289
  def run(s,data=nil)
270
290
  res = send_cmd(s,data)
271
291
  if !res.empty?
272
- if res.size > 7
273
- msg = "\n"+res[0..5].join("")+" :\n"
292
+ if res.size < 7
293
+ if res.all?{|x| /^\s*(line \d+: )?warning:/i =~ x}
294
+ $stderr.puts res.join.strip
295
+ return nil
296
+ else
297
+ msg = "\n"+res.join.strip
298
+ end
274
299
  else
275
- msg = "\n"+res.join("")
300
+ msg = "\n"+res[0..5].join.strip+"\n :\n"
276
301
  end
277
302
  kernel_raise GnuplotError,msg
278
303
  end
279
304
  nil
280
305
  end
281
- private :run
282
306
 
283
307
  def send_cmd(s,data=nil)
284
308
  puts "<"+s if @debug
@@ -290,25 +314,39 @@ class Gnuplot
290
314
  @history << s
291
315
  @last_message = []
292
316
  while line=@ior.gets
293
- puts ">"+line if @debug
294
317
  break if /^_end_of_cmd_$/ =~ line
318
+ puts ">"+line if @debug
295
319
  @last_message << line
296
320
  end
297
321
  @last_message
298
322
  end
299
323
  private :send_cmd
300
324
 
301
- def parse_plot_args(cmd,args)
302
- cPlotItem = (cmd == "plot") ? PlotItem : SPlotItem
303
- list = [[],cPlotItem.new] # first item is range
304
- item = list.last
325
+ def parse_plot_args(cPlotItem,args)
326
+ range = []
327
+ while !args.empty?
328
+ case a = args.first
329
+ when Range
330
+ range << range_to_s(args.shift)
331
+ when String
332
+ if /^\[.*\]$/ =~ a
333
+ range << args.shift
334
+ else
335
+ break
336
+ end
337
+ else
338
+ break
339
+ end
340
+ end
341
+ item = cPlotItem.new # first item is range
342
+ list = [range,item]
305
343
  args.each do |arg|
306
344
  case arg
307
345
  when Range
308
- list.first << arg
346
+ list.first << range_to_s(arg)
309
347
  when Array
310
348
  if arg.all?{|e| e.kind_of?(Range)}
311
- list.first.concat(arg)
349
+ arg.each{|e| list.first << range_to_s(e)}
312
350
  elsif PlotItem.is_data(arg)
313
351
  item << arg
314
352
  else
@@ -318,6 +356,9 @@ class Gnuplot
318
356
  when Hash
319
357
  item << arg
320
358
  list << item = cPlotItem.new # next PlotItem
359
+ when String
360
+ list.pop if list.last.empty?
361
+ list << item = cPlotItem.new(arg) # next PlotItem
321
362
  else
322
363
  item << arg
323
364
  end
@@ -327,27 +368,102 @@ class Gnuplot
327
368
  end
328
369
  private :parse_plot_args
329
370
 
371
+ def range_to_s(*a)
372
+ case a.size
373
+ when 1
374
+ a = a[0]
375
+ "[#{a.first}:#{a.last}]"
376
+ when 2
377
+ "[#{a[0]}:#{a[1]}]"
378
+ else
379
+ raise ArgumetError,"wrong number of argument"
380
+ end
381
+ end
382
+ private :range_to_s
383
+
384
+ def parse_fit_args(args)
385
+ range = []
386
+ while !args.empty?
387
+ case a = args.first
388
+ when Range
389
+ range << range_to_s(args.shift)
390
+ when String
391
+ if /^\[.*\]$/ =~ a
392
+ range << args.shift
393
+ else
394
+ break
395
+ end
396
+ else
397
+ break
398
+ end
399
+ end
400
+ items = FitItem.new(args.shift, args.shift)
401
+ args.each do |arg|
402
+ case arg
403
+ when Range
404
+ range << range_to_s(arg)
405
+ when Array
406
+ if arg.all?{|e| e.kind_of?(Range)}
407
+ arg.each{|e| range << range_to_s(e)}
408
+ else
409
+ items << arg
410
+ end
411
+ else
412
+ items << arg
413
+ end
414
+ end
415
+ return [range,items]
416
+ end
417
+ private :parse_fit_args
418
+
330
419
 
331
420
  # @private
332
421
  module OptArg # :nodoc: all
333
422
 
334
423
  module_function
335
424
 
425
+ def from_symbol(s)
426
+ s = s.to_s
427
+ if /^(.*)_(noquote|nq)$/ =~ s
428
+ s = $1
429
+ end
430
+ s.tr('_',' ')
431
+ end
432
+
336
433
  def parse(*opts)
337
434
  sep = ","
338
- opts.map do |opt|
339
- sep = " " if !opt.kind_of?(Numeric)
435
+ a = []
436
+ while opt = opts.shift
437
+ if !opt.kind_of?(Numeric)
438
+ sep = " "
439
+ end
340
440
  case opt
441
+ when Symbol
442
+ a << from_symbol(opt)
443
+ case opt
444
+ when :label
445
+ if opts.first.kind_of?(Integer)
446
+ a << opts.shift.to_s
447
+ end
448
+ if opts.first.kind_of?(String)
449
+ a << OptArg.quote(opts.shift)
450
+ end
451
+ when NEED_QUOTE
452
+ if opts.first.kind_of?(String)
453
+ a << OptArg.quote(opts.shift)
454
+ end
455
+ end
341
456
  when Array
342
- opt.map{|v| "#{parse(*v)}"}.join(sep)
457
+ a << parse(*opt)
343
458
  when Hash
344
- opt.map{|k,v| parse_kv(k,v)}.compact.join(" ")
459
+ a << opt.map{|k,v| parse_kv(k,v)}.compact.join(" ")
345
460
  when Range
346
- "[#{opt.begin}:#{opt.end}]"
461
+ a << "[#{opt.begin}:#{opt.end}]"
347
462
  else
348
- opt.to_s
463
+ a << opt.to_s
349
464
  end
350
- end.join(sep)
465
+ end
466
+ a.join(sep)
351
467
  end
352
468
 
353
469
  NEED_QUOTE = %w[
@@ -357,21 +473,16 @@ class Gnuplot
357
473
  commentschars
358
474
  dashtype
359
475
  decimalsign
360
- dt
361
- font
476
+ file
362
477
  fontpath
363
478
  format
364
- format_cb
365
- format_x
366
- format_x2
367
- format_xy
368
- format_y
369
- format_y2
370
- format_z
371
479
  locale
372
480
  logfile
373
481
  missing
482
+ name
483
+ newhistogram
374
484
  output
485
+ prefix
375
486
  print
376
487
  rgb
377
488
  separator
@@ -383,52 +494,96 @@ class Gnuplot
383
494
  y2label
384
495
  ylabel
385
496
  zlabel
386
- cb
387
- x
388
497
  xy
389
- x2
390
- y
391
- y2
392
- z
498
+ ]
499
+ NONEED_QUOTE = %w[
500
+ for
501
+ log
502
+ smooth
393
503
  ]
394
504
 
395
505
  def NEED_QUOTE.===(k)
506
+ k = $1 if /_([^_]+)$/ =~ k
396
507
  re = /^#{k}/
508
+ return false if NONEED_QUOTE.any?{|q| re =~ q}
397
509
  any?{|q| re =~ q}
398
510
  end
399
511
 
400
- def parse_kv(k,v)
401
- case k.to_sym
512
+ def quote(s)
513
+ case s
514
+ when String
515
+ if /^'(.*)'$/ =~ s || /^"(.*)"$/ =~ s
516
+ s = $1
517
+ end
518
+ s.inspect
519
+ else
520
+ s
521
+ end
522
+ end
523
+
524
+ def squote(s)
525
+ case s
526
+ when String
527
+ if /^'.*'$/ =~ s || /^".*"$/ =~ s
528
+ s
529
+ else
530
+ "'#{s}'"
531
+ end
532
+ else
533
+ s
534
+ end
535
+ end
536
+
537
+ def parse_kv(s,v)
538
+ k = from_symbol(s)
539
+ case s.to_sym
402
540
  when :at
403
541
  case v
404
542
  when String
405
543
  "#{k} #{v}" # not quote
406
544
  when Array
407
- "#{k} #{v.map{|x|(x.kind_of? String) ? x.inspect : x.to_s}.join(",")}"
545
+ "#{k} #{v.map{|x| x.to_s}.join(",")}"
408
546
  else
409
547
  "#{k} #{parse(v)}"
410
548
  end
411
549
  when :label
412
550
  case v
413
551
  when String
414
- "#{k} #{v.inspect}"
552
+ "#{k} #{OptArg.quote(v)}"
415
553
  when Array
416
554
  if v[0].kind_of?(Integer) && v[1].kind_of?(String)
417
- "#{k} #{parse(v[0],v[1].inspect,*v[2..-1])}"
555
+ "#{k} #{parse(v[0],OptArg.quote(v[1]),*v[2..-1])}"
418
556
  elsif v[0].kind_of?(String)
419
- "#{k} #{parse(v[0].inspect,*v[1..-1])}"
557
+ "#{k} #{parse(OptArg.quote(v[0]),*v[1..-1])}"
420
558
  else
421
559
  "#{k} #{parse(*v)}"
422
560
  end
561
+ when TrueClass
562
+ k
423
563
  else
424
564
  "#{k} #{parse(v)}"
425
565
  end
426
566
  when NEED_QUOTE
427
567
  case v
428
568
  when String
429
- "#{k.to_s.sub(/_/,' ')} #{v.inspect}"
569
+ "#{k} #{OptArg.quote(v)}"
570
+ when TrueClass
571
+ k
572
+ when NilClass
573
+ nil
574
+ when FalseClass
575
+ nil
430
576
  when Array
431
- "#{k} #{v[0].inspect} #{parse(*v[1..-1])}"
577
+ case v[0]
578
+ when String
579
+ if v.size == 1
580
+ "#{k} #{OptArg.quote(v[0])}"
581
+ else
582
+ "#{k} #{OptArg.quote(v[0])} #{parse(*v[1..-1])}"
583
+ end
584
+ else
585
+ "#{k} #{parse(*v)}"
586
+ end
432
587
  else
433
588
  "#{k} #{parse(v)}"
434
589
  end
@@ -437,14 +592,17 @@ class Gnuplot
437
592
  when String
438
593
  "#{k} #{v}"
439
594
  when TrueClass
440
- "#{k}"
595
+ k
441
596
  when NilClass
442
597
  nil
443
598
  when FalseClass
444
599
  nil
445
600
  when Array
446
- if /^#{k}/ =~ "using"
601
+ re = /^#{k}/
602
+ if re =~ "using" || re =~ "every"
447
603
  "#{k} #{v.join(':')}"
604
+ elsif v.empty?
605
+ k
448
606
  else
449
607
  "#{k} #{parse(*v)}"
450
608
  end
@@ -501,7 +659,7 @@ class Gnuplot
501
659
  if (o=@items.last).kind_of? Hash
502
660
  if o.any?{|k,v| /^#{k}/ =~ "using"}
503
661
  # @function is data file
504
- @function = "'#{@function}'"
662
+ @function = OptArg.squote(@function)
505
663
  end
506
664
  end
507
665
  else
@@ -514,7 +672,11 @@ class Gnuplot
514
672
  @options << x
515
673
  end
516
674
  end
517
- @data = parse_data(data)
675
+ if data.empty?
676
+ @function = ''
677
+ else
678
+ @data = parse_data(data)
679
+ end
518
680
  end
519
681
  end
520
682
  end
@@ -544,6 +706,27 @@ class Gnuplot
544
706
  end # PlotItem
545
707
 
546
708
 
709
+ # @private
710
+ class FitItem # :nodoc: all
711
+ def initialize(expression,datafile)
712
+ @expression = expression
713
+ @datafile = datafile
714
+ @items = []
715
+ end
716
+
717
+ def <<(item)
718
+ @items << item
719
+ end
720
+
721
+ def empty?
722
+ @items.empty?
723
+ end
724
+
725
+ def cmd_str
726
+ "%s %s %s" % [@expression, OptArg.squote(@datafile), OptArg.parse(*@items)]
727
+ end
728
+ end
729
+
547
730
  # @private
548
731
  class SPlotItem < PlotItem # :nodoc: all
549
732
  def parse_data(data)
@@ -567,6 +750,9 @@ class Gnuplot
567
750
  end
568
751
 
569
752
  def initialize(*data)
753
+ if data.empty?
754
+ raise ArgumentError,"no data"
755
+ end
570
756
  @data = data.map{|a| a.flatten}
571
757
  @n = @data.map{|a| a.size}.min
572
758
  @text = true
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: numo-gnuplot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masahiro TANAKA
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-12-29 00:00:00.000000000 Z
11
+ date: 2017-01-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -50,6 +50,7 @@ files:
50
50
  - LICENSE
51
51
  - README.md
52
52
  - Rakefile
53
+ - examples/Rakefile
53
54
  - examples/all.rb
54
55
  - examples/ex001.rb
55
56
  - examples/ex002.rb