gnutemplate 0.1.8.3 → 0.1.9

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
  SHA256:
3
- metadata.gz: '08348dfcbd8aa2c5f4d3204ba6d1cbb7215e69c5c36d3c7ed125f2947cc7b0a5'
4
- data.tar.gz: a0b2af796fd95613d344446517178c53c5ba2ca11b4b32b08ff2b836fdde7542
3
+ metadata.gz: 7fef32d38de9aac460a3999b100fedb69ffa1a95a72589fc196b4dc34385e1bf
4
+ data.tar.gz: 3ff03c9032f496344d52b28f99e25e6f7440e31b8a617e292871123d0fced7c4
5
5
  SHA512:
6
- metadata.gz: f5753ee46b8a405aa613df70a6f8dd771b84646da13a242cd0e77d5bbcbdbb046cf09d4d718ab561459497008d0e249bb429edca9d82c029a7d1caa81fbbc134
7
- data.tar.gz: 5d17439db11bb344a51ac20a32b7bf04fe6930f86e204546d043e043750f4d1a775b573ef48a86df53c01b01bec8e2ca74771245bffe3c1cc96403ff7884c136
6
+ metadata.gz: c6af589bee0cd490502d19f180a5929af1633bd6aae0441856fb8ad7cf3e5de945ecaac27171f31c6e29ba18a668f5784b0036a091a45e6826ca6d2da828fc34
7
+ data.tar.gz: 466d9643c0fdb0e0697a4afc445da81c1d450dbde07550a62d19ce22e0ac398ac4a3c725454a4a7bd09502f01f980bc963fdcae59c8d404be34d49e055c26a46
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Gnutemplate
4
- VERSION = "0.1.8.3"
4
+ VERSION = "0.1.9"
5
5
  end
data/lib/gnutemplate.rb CHANGED
@@ -4,9 +4,32 @@ require_relative "gnutemplate/version"
4
4
  require "numo/gnuplot"
5
5
  require "histogram/array"
6
6
 
7
+ module ExtendNP
8
+ def new_to_iruby
9
+ require 'tempfile'
10
+ tempfile_svg = Tempfile.open(['plot','.svg'])
11
+ # output SVG to tmpfile
12
+ gp = Numo::Gnuplot.default
13
+ gp.reset
14
+ gp.unset :multiplot # added
15
+ gp.set terminal:'svg'
16
+ gp.set output:tempfile_svg.path
17
+ gp.instance_eval(&@block)
18
+ ### gp.unset 'output' # commented out
19
+ svg = File.read(tempfile_svg.path)
20
+ tempfile_svg.close
21
+ ["image/svg+xml",svg]
22
+ end
23
+ end
24
+
25
+ class Numo::Gnuplot::NotePlot
26
+ include ExtendNP
27
+ alias_method :old_to_iruby, :to_iruby
28
+ alias_method :to_iruby, :new_to_iruby
29
+ end
30
+
7
31
  module Gnutemplate
8
32
  class Error < StandardError; end
9
-
10
33
 
11
34
  def note_line(data)
12
35
  Numo.noteplot do
@@ -112,11 +135,18 @@ module Gnutemplate
112
135
  end
113
136
  end
114
137
 
115
- def note_histogram(data, labels: nil, pileup: true,
138
+ # いずれかはここからargsを返せるようにする
139
+ # set terminal部の扱いは考えなければならない(多分、_drow, _noteにif...set...end だけ残せばいい)
140
+ def histogram(data, labels: nil, pileup: true,
116
141
  xmin: nil, xmax: nil, ymin: 0, ymax: nil, bins: 10,
117
142
  figsize: 1.0, rotate_xtics: 45,
118
143
  fill: true, alpha: 33, background: nil,
119
- file: nil, engine: :note)
144
+ file: nil)
145
+
146
+ if !file.nil?
147
+ set terminal: "gif"
148
+ set output: file
149
+ end
120
150
 
121
151
  data = [data] if data[0].kind_of?(Numeric) || data[0].nil?
122
152
 
@@ -128,8 +158,86 @@ module Gnutemplate
128
158
  freqs = data.map {|d| d.to_a.compact.histogram(bins, min: xmin, max: xmax) }
129
159
  ymax ||= freqs.map{ _1[1] }.flatten.max * 1.1
130
160
 
161
+ if pileup
162
+ ###########
163
+ ###
164
+ ###########
165
+
166
+ set size: "#{figsize},#{figsize}"
167
+ set style: "fill solid" if fill
168
+
169
+ xticinterval = (xmax-xmin).to_f / bins
170
+ set xtics: "#{xmin-xticinterval}, #{xticinterval}, #{xmax+xticinterval}"
171
+ set(:xtics, "rotate by #{rotate_xtics}") if rotate_xtics
172
+
173
+ set xrange: (xmin-xticinterval)..(xmax+xticinterval)
174
+ set yrange: ymin..ymax
175
+
176
+ args = background ? ["[#{xmin}:#{xmax}] #{ymax} with filledc above y=#{ymin} fc \"##{background}\" notitle", {}] : []
177
+
178
+ freqs.each_with_index do |f, i|
179
+ args.push f[0], f[1]
180
+
181
+ if labels
182
+ args.push({:with => :boxes, :title => labels[i], :fillcolor => "rgb \"#{colors[i % 4]}\""})
183
+ else
184
+ args.push({:with => :boxes, :fillcolor => "rgb \"#{colors[i % 4]}\""})
185
+ end
186
+ end
187
+
188
+ plot *args
189
+
190
+ else
191
+
192
+ ###########
193
+ ###
194
+ ###########
195
+ # set title:"Temperature"
196
+ set auto:"x"
197
+ set :style, :data, :histogram
198
+ set :style, :histogram, :cluster, gap:1
199
+ set :style, :fill, solid: 1.0 - (alpha/100.0), border:-1
200
+ set boxwidth:0.9
201
+ set :xtic, :rotate, by: rotate_xtics, scale: 0
202
+
203
+ xticinterval = (xmax-xmin).to_f / bins
204
+ set xrange: 0..((xmax-xmin) / xticinterval).to_i
205
+
206
+ xtics = freqs[0][0]
207
+ .each.with_index
208
+ .inject("(") { |result, (x, i)| result += "'#{x-xticinterval/2}-#{x+xticinterval/2}' #{i}," }
209
+ .gsub(/,$/, ")")
210
+ set xtics: xtics
211
+
212
+ labels ||= (0...(freqs.length)).map(&:to_s)
213
+
214
+ args = freqs.zip(labels).each_with_index.map do |(f, l), i|
215
+ [*f, using: 2, w: :histogram, t: labels[i], fillcolor: "rgb \"#{colors[i % 4]}\""]
216
+ end
217
+
218
+ plot *args
219
+
220
+ end # Of if pileup..else
221
+ end
222
+
223
+ def note_histogram(data, labels: nil, pileup: true,
224
+ xmin: nil, xmax: nil, ymin: 0, ymax: nil, bins: 10,
225
+ figsize: 1.0, rotate_xtics: 45,
226
+ fill: true, alpha: 33, background: nil,
227
+ file: nil)
228
+
131
229
  Numo.noteplot do
132
230
 
231
+ data = [data] if data[0].kind_of?(Numeric) || data[0].nil?
232
+
233
+ alpha_hex = (alpha * 256 / 100).to_s(16).upcase
234
+ colors = ["##{alpha_hex}CC0000", "##{alpha_hex}00CC00", "##{alpha_hex}0000CC", "##{alpha_hex}888800"]
235
+
236
+ xmax ||= data.map(&:to_a).flatten.compact.max
237
+ xmin ||= data.map(&:to_a).flatten.compact.min
238
+ freqs = data.map {|d| d.to_a.compact.histogram(bins, min: xmin, max: xmax) }
239
+ ymax ||= freqs.map{ _1[1] }.flatten.max * 1.1
240
+
133
241
  if !file.nil?
134
242
  set terminal: "gif"
135
243
  set output: file
@@ -203,7 +311,7 @@ module Gnutemplate
203
311
  xmin: nil, xmax: nil, ymin: 0, ymax: nil, bins: 10,
204
312
  figsize: 1.0, rotate_xtics: 45,
205
313
  fill: true, alpha: 33, background: nil,
206
- file: nil, engine: :note)
314
+ file: nil)
207
315
 
208
316
  data = [data] if data[0].kind_of?(Numeric) || data[0].nil?
209
317
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gnutemplate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8.3
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - showata
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-10-14 00:00:00.000000000 Z
11
+ date: 2023-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: numo-gnuplot