gnutemplate 0.1.8.3 → 0.1.9

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
  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