feldtruby 0.3.12 → 0.3.13

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.
@@ -13,7 +13,11 @@ class RCommunicator
13
13
  # Will stay open until closed or the ruby interpreter exits.
14
14
  # echo = false and interactive = false
15
15
  @r = RinRuby.new(false, false)
16
+
17
+ @installed_libraries = []
18
+
16
19
  setup_r()
20
+
17
21
  end
18
22
 
19
23
  # Include necessary libraries.
@@ -23,7 +27,13 @@ class RCommunicator
23
27
 
24
28
  # Include a library after ensuring it has been installed
25
29
  def include_library(lib)
30
+
31
+ return if @installed_libraries.include?(lib)
32
+
33
+ @installed_libraries << lib
34
+
26
35
  @r.eval "if(!library(#{lib}, logical.return=TRUE)) {install.packages(\"#{lib}\"); library(#{lib});}"
36
+
27
37
  end
28
38
 
29
39
  # Load R scripts in the feldtruby/R directory.
@@ -197,12 +207,6 @@ end
197
207
  # Plotting data sets in R with ggplot2 and save them to files.
198
208
  module FeldtRuby::Statistics::Plotting
199
209
 
200
- GfxFormatToGfxParams = {
201
- "pdf" => {:width => 7, :height => 5, :paper => 'special'},
202
- "png" => {:units => "cm", :width => 12, :height => 8},
203
- "tiff" => {:units => "cm", :width => 12, :height => 8},
204
- }
205
-
206
210
  def gfx_device(format, width = nil, height = nil)
207
211
 
208
212
  format = format.to_s # If given as a symbol instead of a string
@@ -228,19 +232,6 @@ module FeldtRuby::Statistics::Plotting
228
232
 
229
233
  end
230
234
 
231
- def set_file_ending(filepath, newEnding)
232
-
233
- dirname = File.dirname(filepath)
234
-
235
- current_ending = filepath.split(".").last
236
-
237
- # Works even if there is no current file ending:
238
- basename = File.basename(filepath, "." + current_ending)
239
-
240
- File.join dirname, basename
241
-
242
- end
243
-
244
235
  def plot_2dims(csvFilePath, graphFilePath, xName, yName, title = "scatterplot", format = "pdf", width = nil, height = nil)
245
236
 
246
237
  include_library("ggplot2")
@@ -286,38 +277,71 @@ module FeldtRuby::Statistics::Plotting
286
277
  }
287
278
  end
288
279
 
289
- # This is wrapped around a block that draws a diagram and will save that diagram
290
- # to the given filename.
291
- def save_graph(filename)
292
- RC.eval("pdf(#{filename.inspect}, width = 6, height = 4, paper = 'special')")
280
+ GfxFormatToGfxParams = {
281
+ "pdf" => {:width => 7, :height => 5, :paper => 'special'},
282
+ "png" => {:units => "cm", :width => 12, :height => 8},
283
+ "tiff" => {:units => "cm", :width => 12, :height => 8},
284
+ }
285
+
286
+ # Wrap a sve_graph call around a block that draws a diagram and this will
287
+ # save the diagram to a file. The filetype is given by the file ending of
288
+ # the file name.
289
+ def save_graph(filename, width = nil, height = nil)
290
+
291
+ file_ending = filename.split(".").last
292
+
293
+ raise "Don't now about graphics format #{file_ending}" unless GfxFormatToGfxParams.has_key?(file_ending)
294
+
295
+ params = GfxFormatToGfxParams[file_ending].clone
296
+
297
+ params[:width] = width if width
298
+ params[:height] = height if height
299
+
300
+ RC.eval("#{file_ending}(#{filename.inspect}, #{hash_to_R_params(params)})")
301
+
293
302
  yield() # Just be sure not to nest these save_graph calls within each other...
303
+
294
304
  RC.eval("dev.off()")
305
+
295
306
  end
296
307
 
297
308
  # Overlaid density graph of the observations (sampled distributions) in data1
298
- # and data2.
299
- def overlaid_densities(data1, data2, xlabel = "x", ylabel = "density")
309
+ # and data2. The _dataMap_ maps the name of each data series to an array with
310
+ # its observations.
311
+ def overlaid_densities(dataMap, title = "Densities of distributions", datasetsName = "distribution", xlabel = "values", ylabel = "density")
312
+
300
313
  include_library("ggplot2")
314
+ include_library("reshape2")
315
+
316
+ cardinalities = dataMap.values.map {|vs| vs.length}.uniq
301
317
 
302
- raise ArgumentError.new("Must have same cardinality") unless data1.length == data2.length
318
+ unless cardinalities.length == 1
319
+
320
+ raise ArgumentError.new("Must have same cardinality")
321
+
322
+ end
303
323
 
304
324
  script = <<-EOS
305
- df <- data.frame(dc1 = _d1_, dc2 = _d2_)
306
- f <- ggplot(df)
307
- f <- f + geom_density(aes(dc1, fill = "blue"), alpha = 0.2)
308
- f <- f + geom_density(aes(dc2, fill = "red"), alpha = 0.2)
309
- f <- f + theme_bw() + ggtitle("Overlaid densities")
310
- f <- f + theme(plot.title = element_text(face="bold", size=12),
311
- axis.title.x = element_text(face="bold", size=10)
312
- ) + xlab(_xlabel_)
313
- # pdf("tmp.pdf", width = 6, height = 4, paper='special')
325
+ df <- data.frame(index = (1:#{cardinalities.first}), #{hash_to_R_params(dataMap)})
326
+ df.m <- melt(df, id = "index")
327
+ names(df.m)[2] <- _datasetsName_
328
+ f <- ggplot(df.m, aes(value, fill=#{datasetsName}))
329
+ f <- f + geom_density(alpha = 0.2, size = 0.5) + scale_color_brewer()
330
+ f <- f + ggtitle(_title_) + xlab(_xlabel_) + ylab(_ylabel_)
331
+ f <- f + theme_bw()
332
+ f <- f + theme(
333
+ plot.title = element_text(face="bold", size=12),
334
+ axis.title.x = element_text(face="bold", size=10),
335
+ axis.title.y = element_text(face="bold", size=10)
336
+ )
314
337
  f
315
- #dev.off()
316
338
  EOS
317
- subst_eval script, {:d1 => data1, :d2 => data2,
339
+
340
+ subst_eval script, {:title => title, :datasetsName => datasetsName,
318
341
  :xlabel => xlabel, :ylabel => ylabel}
319
342
 
320
343
  end
344
+
321
345
  end
322
346
 
323
347
  class FeldtRuby::RCommunicator
@@ -1,3 +1,3 @@
1
1
  module FeldtRuby
2
- VERSION = "0.3.12"
2
+ VERSION = "0.3.13"
3
3
  end
@@ -170,19 +170,20 @@ describe "Plotting" do
170
170
  #
171
171
  # end
172
172
 
173
- it "can do overlaid density plot" do
173
+ it "can do overlaid density plot of three arrays" do
174
174
 
175
175
  d1 = Array.new(100) {rand(10)}
176
- d2 = Array.new(100) {2 + rand(5)}
176
+ d2 = Array.new(100) {2 + rand(6)}
177
+ g = Array.new(100) {1 + rand(12)}
177
178
 
178
- out = "tmp.pdf"
179
+ out = "tmp2.pdf"
179
180
 
180
181
  RC.save_graph(out) do
181
- RC.overlaid_densities(d1, d2)
182
+ RC.overlaid_densities({:ind1 => d1, :ind2 => d2, :goal => g})
182
183
  end
183
184
 
184
185
  File.exist?(out).must_equal true
185
186
  File.delete out
186
-
187
+
187
188
  end
188
189
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: feldtruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.12
4
+ version: 0.3.13
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -73,7 +73,6 @@ files:
73
73
  - R/diffusion_kde.R
74
74
  - README.md
75
75
  - Rakefile
76
- - Rplots.pdf
77
76
  - TODO
78
77
  - feldtruby.gemspec
79
78
  - lib/feldtruby.rb
data/Rplots.pdf DELETED
Binary file