Module: R::SVG

Defined in:
lib/rbbt/util/R/plot.rb

Class Method Summary collapse

Class Method Details

.ggplot(data, script = nil, width = nil, height = nil, options = {}) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/rbbt/util/R/plot.rb', line 8

def self.ggplot(data, script = nil, width = nil, height = nil, options = {})
  width ||= 3
  height ||= 3
  values = []

  options = options.dup

  sources = [:plot, :svg, options[:source]].flatten.compact
  options.delete :source

  field_classes = options[:field_classes]

  fast = options[:fast]

  if fast
    save_method = "rbbt.SVG.save.fast"
  else
    save_method = "rbbt.SVG.save"
  end

  if data
    data.each do |k,v|
      v = Array === v ? v : [v]
      next if v == "NA" or v.nil? or v.include? "NA" or v.include? nil
      values = v
      break
    end
    values = [values] unless Array === values

    field_classes = values.collect do |v| 
      v = v.first if Array === v
      case v
      when FalseClass, TrueClass
        "'logical'"
      when Numeric
        "'numeric'"
      when String
        if v.strip =~ /^[-+]?[\d\.]+$/
          "'numeric'"
        else
          "'character'"
        end
      when Symbol
        "'factor'"
      else
        ":NA"
      end
    end if field_classes.nil?

    if field_classes.any?
      options[:R_open] ||= "colClasses=c('character'," + field_classes * ", " + ')'
    else
      options[:R_open] ||= "colClasses=c('character')"
    end

    TmpFile.with_file nil, true, :extension => 'svg' do |tmpfile|

      data.R <<-EOF, sources, options
  plot = { #{script} }

  #{save_method}('#{tmpfile}', plot, width = #{R.ruby2R width}, height = #{R.ruby2R height})
  data = NULL
      EOF

      Open.read(tmpfile).gsub(/(glyph\d+-\d+)/, '\1-' + File.basename(tmpfile))

    end
  else

    TmpFile.with_file nil, true, :extension => 'svg' do |tmpfile|
      R.run <<-EOF, sources, options
  plot = { #{script} }

  #{save_method}('#{tmpfile}', plot, width = #{R.ruby2R width}, height = #{R.ruby2R height})
  data = NULL
      EOF
      Open.read(tmpfile).gsub(/(glyph\d+-\d+)/, '\1-' + File.basename(tmpfile))
    end
  end
end

.ggplotSVG(*args) ⇒ Object



4
5
6
# File 'lib/rbbt/util/R/plot.rb', line 4

def self.ggplotSVG(*args)
  ggplot(*args)
end