galaaz 0.4.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 +7 -0
- data/README.md +32 -0
- data/Rakefile +177 -0
- data/bin/galaaz +8 -0
- data/examples/50Plots_MasterList/scatter_plot.rb +51 -0
- data/examples/baseball.csv +1 -0
- data/examples/baseball.rb +16 -0
- data/examples/ggplot.rb +178 -0
- data/examples/islr/Figure.jpg +0 -0
- data/examples/islr/all.rb +32 -0
- data/examples/islr/ch2.spec.rb +148 -0
- data/examples/islr/ch3.spec.rb +28 -0
- data/examples/islr/ch3_boston.rb +77 -0
- data/examples/islr/ch3_multiple_regression.rb +36 -0
- data/examples/islr/ch6.spec.rb +64 -0
- data/examples/paper/paper.rb +36 -0
- data/examples/sthda_ggplot/README.md +38 -0
- data/examples/sthda_ggplot/all.rb +68 -0
- data/examples/sthda_ggplot/one_variable_continuous/density_gg.rb +52 -0
- data/examples/sthda_ggplot/one_variable_continuous/geom_area.rb +61 -0
- data/examples/sthda_ggplot/one_variable_continuous/geom_density.rb +77 -0
- data/examples/sthda_ggplot/one_variable_continuous/geom_dotplot.rb +69 -0
- data/examples/sthda_ggplot/one_variable_continuous/geom_freqpoly.rb +69 -0
- data/examples/sthda_ggplot/one_variable_continuous/geom_histogram.rb +62 -0
- data/examples/sthda_ggplot/one_variable_continuous/histogram_density.rb +55 -0
- data/examples/sthda_ggplot/one_variable_continuous/stat.rb +62 -0
- data/examples/sthda_ggplot/one_variable_discrete/bar.rb +54 -0
- data/examples/sthda_ggplot/qplots/box_violin_dot.rb +57 -0
- data/examples/sthda_ggplot/qplots/scatter_plots.rb +67 -0
- data/examples/sthda_ggplot/scatter_gg.rb +60 -0
- data/examples/sthda_ggplot/two_variables_cont_bivariate/geom_bin2d.rb +49 -0
- data/examples/sthda_ggplot/two_variables_cont_bivariate/geom_density2d.rb +64 -0
- data/examples/sthda_ggplot/two_variables_cont_bivariate/geom_hex.rb +52 -0
- data/examples/sthda_ggplot/two_variables_cont_cont/geom_point.rb +65 -0
- data/examples/sthda_ggplot/two_variables_cont_cont/geom_smooth.rb +66 -0
- data/examples/sthda_ggplot/two_variables_cont_cont/misc.rb +83 -0
- data/examples/sthda_ggplot/two_variables_cont_function/geom_area.rb +63 -0
- data/examples/sthda_ggplot/two_variables_disc_cont/geom_bar.rb +85 -0
- data/examples/sthda_ggplot/two_variables_disc_cont/geom_boxplot.rb +62 -0
- data/examples/sthda_ggplot/two_variables_disc_cont/geom_dotplot.rb +75 -0
- data/examples/sthda_ggplot/two_variables_disc_cont/geom_jitter.rb +74 -0
- data/examples/sthda_ggplot/two_variables_disc_cont/geom_line.rb +55 -0
- data/examples/sthda_ggplot/two_variables_disc_cont/geom_violin.rb +70 -0
- data/examples/sthda_ggplot/two_variables_disc_disc/geom_jitter.rb +40 -0
- data/examples/sthda_ggplot/two_variables_error/geom_crossbar.rb +108 -0
- data/examples/subsetting.rb +372 -0
- data/lib/expression.rb +45 -0
- data/lib/galaaz.rb +27 -0
- data/lib/r.rb +118 -0
- data/lib/r_methods.rb +89 -0
- data/lib/rbinary_operators.rb +226 -0
- data/lib/rclosure.rb +34 -0
- data/lib/rdata_frame.rb +63 -0
- data/lib/renvironment.rb +34 -0
- data/lib/rexpression.rb +34 -0
- data/lib/rindexed_object.rb +68 -0
- data/lib/rlanguage.rb +64 -0
- data/lib/rlist.rb +72 -0
- data/lib/rmatrix.rb +38 -0
- data/lib/rmd_indexed_object.rb +43 -0
- data/lib/robject.rb +297 -0
- data/lib/rpkg.rb +53 -0
- data/lib/rsupport.rb +292 -0
- data/lib/rsupport_scope.rb +77 -0
- data/lib/rsymbol.rb +57 -0
- data/lib/ruby_callback.rb +83 -0
- data/lib/ruby_extensions.rb +74 -0
- data/lib/runary_operators.rb +58 -0
- data/lib/rvector.rb +117 -0
- data/r_requires/ggplot.rb +31 -0
- data/specs/all.rb +45 -0
- data/specs/r_dataframe.spec.rb +181 -0
- data/specs/r_eval.spec.rb +164 -0
- data/specs/r_function.spec.rb +105 -0
- data/specs/r_language.spec.rb +135 -0
- data/specs/r_list.spec.rb +129 -0
- data/specs/r_list_apply.spec.rb +99 -0
- data/specs/r_matrix.spec.rb +83 -0
- data/specs/r_vector_creation.spec.rb +99 -0
- data/specs/r_vector_functions.spec.rb +59 -0
- data/specs/r_vector_object.spec.rb +94 -0
- data/specs/r_vector_operators.spec.rb +174 -0
- data/specs/r_vector_subsetting.spec.rb +136 -0
- data/specs/tmp.rb +134 -0
- data/version.rb +2 -0
- metadata +198 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: 472e7863d96eb66bf0aa0e78194c021c5a128049
|
|
4
|
+
data.tar.gz: b5742fe889c830c83f1c53bd091ffa43d3ec44fb
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 0f39228250f568f09d322dc1b70647982cdfa785e895695e30dab20ba595f5a5fe42ec5f56076c3deddbde8a7ff3172a7addc35c913315bb3f2c2d151d998107
|
|
7
|
+
data.tar.gz: 8e407929466a0d8152c0eb8c7ea5b28bea0ed2818c3abcc732659845448c01898dd6af7cf0332233bcc5ce29d9718285a1a747c2f1fc72ea08ad401aa712d1ad
|
data/README.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Running Ruby and R - The Polyglot Environment
|
|
2
|
+
|
|
3
|
+
TruffleRuby (the Polyglot implementation of Ruby) can access, through the Polyglot interface, any other
|
|
4
|
+
language available in the environment. For instance, in the code bellow, TruffleRuby makes a call to
|
|
5
|
+
JavaScript:
|
|
6
|
+
|
|
7
|
+
require 'json'
|
|
8
|
+
|
|
9
|
+
obj = {time: Time.now,
|
|
10
|
+
msg: 'Hello World',
|
|
11
|
+
payload: (1..10).to_a }
|
|
12
|
+
|
|
13
|
+
encoded = JSON.dump(obj)
|
|
14
|
+
|
|
15
|
+
js_obj = Polyglot.eval('js', 'JSON.parse').call(encoded)
|
|
16
|
+
puts js_obj[:time]
|
|
17
|
+
puts js_obj[:msg]
|
|
18
|
+
puts js_obj[:payload].join(' ')
|
|
19
|
+
|
|
20
|
+
Calling R is similar to the above. For example, in R, method 'c' concatenates its arguments making a vector:
|
|
21
|
+
|
|
22
|
+
vec = Polyglot.eval('R', 'c').call(1, 2, 3)
|
|
23
|
+
puts vec[0]
|
|
24
|
+
p vec
|
|
25
|
+
> 1
|
|
26
|
+
> #<Truffle::Interop::Foreign@5d03df76>
|
|
27
|
+
|
|
28
|
+
As can be seen, vec is a vector with the first element (indexed at 0 - Ruby indexing) is 1.
|
|
29
|
+
Inspecting vec, show that it is a Truffle::Interop object. Although it is possible to work with
|
|
30
|
+
Interop objects in a program, doing so is hard and error prone. Bellow, we show how integration of
|
|
31
|
+
Ruby and R can greatly simplify the development of Polyglot application.
|
|
32
|
+
|
data/Rakefile
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
##########################################################################################
|
|
4
|
+
# @author Rodrigo Botafogo
|
|
5
|
+
#
|
|
6
|
+
# Copyright © 2018 Rodrigo Botafogo. All Rights Reserved. Permission to use, copy, modify,
|
|
7
|
+
# and distribute this software and its documentation, without fee and without a signed
|
|
8
|
+
# licensing agreement, is hereby granted, provided that the above copyright notice, this
|
|
9
|
+
# paragraph and the following two paragraphs appear in all copies, modifications, and
|
|
10
|
+
# distributions.
|
|
11
|
+
#
|
|
12
|
+
# IN NO EVENT SHALL RODRIGO BOTAFOGO BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
|
|
13
|
+
# INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF
|
|
14
|
+
# THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF RODRIGO BOTAFOGO HAS BEEN ADVISED OF THE
|
|
15
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
16
|
+
#
|
|
17
|
+
# RODRIGO BOTAFOGO SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
18
|
+
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
|
|
19
|
+
# SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS IS".
|
|
20
|
+
# RODRIGO BOTAFOGO HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
|
|
21
|
+
# OR MODIFICATIONS.
|
|
22
|
+
##########################################################################################
|
|
23
|
+
|
|
24
|
+
require 'rake/tasklib'
|
|
25
|
+
require 'rake/testtask'
|
|
26
|
+
|
|
27
|
+
require_relative 'version'
|
|
28
|
+
|
|
29
|
+
#----------------------------------------------------------------------------------------
|
|
30
|
+
#
|
|
31
|
+
#----------------------------------------------------------------------------------------
|
|
32
|
+
|
|
33
|
+
class MakeTask < Rake::TaskLib
|
|
34
|
+
|
|
35
|
+
# Create class variables for the polyglot options and libs
|
|
36
|
+
@@polyglot_options = "--polyglot --jvm -Xsingle_threaded"
|
|
37
|
+
@@libs = "-Ilib/" # -Ir_requires/"
|
|
38
|
+
|
|
39
|
+
#----------------------------------------------------------------------------------------
|
|
40
|
+
#
|
|
41
|
+
#----------------------------------------------------------------------------------------
|
|
42
|
+
|
|
43
|
+
def initialize(group, dir_name, task_name, rspec,
|
|
44
|
+
description = "#{group}:#{task_name}")
|
|
45
|
+
@name = "#{group}:#{task_name}"
|
|
46
|
+
@filepath = "#{dir_name}/#{task_name}"
|
|
47
|
+
@group = group
|
|
48
|
+
@description = description
|
|
49
|
+
@rspec = rspec
|
|
50
|
+
|
|
51
|
+
yield self if block_given?
|
|
52
|
+
define
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
#----------------------------------------------------------------------------------------
|
|
56
|
+
# Actual TruffleRuby command (with options) to run the example
|
|
57
|
+
#----------------------------------------------------------------------------------------
|
|
58
|
+
|
|
59
|
+
def make_task
|
|
60
|
+
@rspec ?
|
|
61
|
+
(sh %{ ruby #{@@polyglot_options} #{@@libs} -S rspec #{@filepath}.rb -f documentation }) :
|
|
62
|
+
(sh %{ ruby #{@@polyglot_options} #{@@libs} -S #{@filepath}.rb })
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
#----------------------------------------------------------------------------------------
|
|
66
|
+
# Creates the tasks. It the task is already defined, then append to it (enhance)
|
|
67
|
+
#----------------------------------------------------------------------------------------
|
|
68
|
+
|
|
69
|
+
def define
|
|
70
|
+
desc @description
|
|
71
|
+
Rake::Task.task_defined?(@name) ? Rake::Task[@name].enhance { make_task } :
|
|
72
|
+
(task(@name) { make_task } )
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
geoms = FileList['examples/sthda_ggplot/**/*.rb']
|
|
78
|
+
specs = FileList['specs/**/*.rb']
|
|
79
|
+
master_list = FileList['examples/50Plots_MasterList/**/*.rb']
|
|
80
|
+
islr = FileList['examples/islr/**/*.rb']
|
|
81
|
+
|
|
82
|
+
#===========================================================================================
|
|
83
|
+
# Creates tasks for all specs.
|
|
84
|
+
# Running 'rake specs:all' will run all specs
|
|
85
|
+
#===========================================================================================
|
|
86
|
+
|
|
87
|
+
specs.each do |f|
|
|
88
|
+
task_name = File.basename(f, ".rb")
|
|
89
|
+
dir_name = File.dirname(f)
|
|
90
|
+
MakeTask.new("specs", dir_name, task_name, true, <<-Desc)
|
|
91
|
+
Executes spec #{task_name}
|
|
92
|
+
Desc
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
#===========================================================================================
|
|
96
|
+
# Creates tasks for ggplot graphics from sthda website
|
|
97
|
+
# Running 'rake sthda:all' will run a slide show of all plots available
|
|
98
|
+
#===========================================================================================
|
|
99
|
+
|
|
100
|
+
geoms.each do |f|
|
|
101
|
+
task_name = File.basename(f, ".rb")
|
|
102
|
+
dir_name = File.dirname(f)
|
|
103
|
+
MakeTask.new("sthda", dir_name, task_name, false, <<-Desc)
|
|
104
|
+
ggplot for #{task_name}
|
|
105
|
+
Desc
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
#===========================================================================================
|
|
109
|
+
# Creates tasks for ggplot graphics from r-statistics.co website
|
|
110
|
+
# Running 'rake master_list:all' will run a slide show of all plots available
|
|
111
|
+
#===========================================================================================
|
|
112
|
+
|
|
113
|
+
master_list.each do |f|
|
|
114
|
+
task_name = File.basename(f, ".rb")
|
|
115
|
+
dir_name = File.dirname(f)
|
|
116
|
+
MakeTask.new("master_list", dir_name, task_name, false, <<-Desc)
|
|
117
|
+
#{task_name} from: http://r-statistics.co/Top50-Ggplot2-Visualizations-MasterList-R-Code.html
|
|
118
|
+
Desc
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
#===========================================================================================
|
|
122
|
+
# Creates tasks for the Introduction to Statistical Learning book labs
|
|
123
|
+
# Running 'rake islr:all' will run all specs
|
|
124
|
+
#===========================================================================================
|
|
125
|
+
|
|
126
|
+
islr.each do |f|
|
|
127
|
+
task_name = File.basename(f, ".rb")
|
|
128
|
+
dir_name = File.dirname(f)
|
|
129
|
+
MakeTask.new("islr", dir_name, task_name, true, <<-Desc)
|
|
130
|
+
Executes islr #{task_name}
|
|
131
|
+
Desc
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
task :default => "sthda:all"
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
=begin
|
|
138
|
+
name = "#{$gem_name}-#{$version}.gem"
|
|
139
|
+
|
|
140
|
+
desc 'default task'
|
|
141
|
+
task :default => [:install_gem]
|
|
142
|
+
|
|
143
|
+
desc 'Makes a Gem'
|
|
144
|
+
task :make_gem do
|
|
145
|
+
sh "gem build #{$gem_name}.gemspec"
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
desc 'Install the gem in the standard location'
|
|
149
|
+
task :install_gem => [:make_gem] do
|
|
150
|
+
sh "gem install #{$gem_name}-#{$version}-java.gem"
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
desc 'Make documentation'
|
|
154
|
+
task :make_doc do
|
|
155
|
+
sh "yard doc lib/*.rb lib/**/*.rb"
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
desc 'Push project to github'
|
|
159
|
+
task :push do
|
|
160
|
+
sh "git push origin master"
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
desc 'Push gem to rubygem'
|
|
164
|
+
task :push_gem do
|
|
165
|
+
sh "push #{name} -p $http_proxy"
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
Rake::TestTask.new do |t|
|
|
169
|
+
t.libs << "test"
|
|
170
|
+
t.test_files = FileList['test/complete.rb']
|
|
171
|
+
t.ruby_opts = ["--server", "-Xinvokedynamic.constants=true", "-J-Xmn512m",
|
|
172
|
+
"-J-Xms1024m", "-J-Xmx1024m"]
|
|
173
|
+
t.verbose = true
|
|
174
|
+
t.warning = true
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
=end
|
data/bin/galaaz
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
##########################################################################################
|
|
4
|
+
# @author Rodrigo Botafogo
|
|
5
|
+
#
|
|
6
|
+
# Copyright © 2018 Rodrigo Botafogo. All Rights Reserved. Permission to use, copy, modify,
|
|
7
|
+
# and distribute this software and its documentation, without fee and without a signed
|
|
8
|
+
# licensing agreement, is hereby granted, provided that the above copyright notice, this
|
|
9
|
+
# paragraph and the following two paragraphs appear in all copies, modifications, and
|
|
10
|
+
# distributions.
|
|
11
|
+
#
|
|
12
|
+
# IN NO EVENT SHALL RODRIGO BOTAFOGO BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
|
|
13
|
+
# INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF
|
|
14
|
+
# THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF RODRIGO BOTAFOGO HAS BEEN ADVISED OF THE
|
|
15
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
16
|
+
#
|
|
17
|
+
# RODRIGO BOTAFOGO SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
18
|
+
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
|
|
19
|
+
# SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS IS".
|
|
20
|
+
# RODRIGO BOTAFOGO HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
|
|
21
|
+
# OR MODIFICATIONS.
|
|
22
|
+
##########################################################################################
|
|
23
|
+
|
|
24
|
+
require 'galaaz'
|
|
25
|
+
require 'ggplot'
|
|
26
|
+
|
|
27
|
+
# load package and data
|
|
28
|
+
R.options(scipen: 999) # turn-off scientific notation like 1e+48
|
|
29
|
+
R.theme_set(R.theme_bw) # pre-set the bw theme.
|
|
30
|
+
|
|
31
|
+
midwest = ~:midwest
|
|
32
|
+
# midwest <- read.csv("http://goo.gl/G1K41K") # bkup data source
|
|
33
|
+
|
|
34
|
+
R.awt
|
|
35
|
+
|
|
36
|
+
# Scatterplot
|
|
37
|
+
gg = midwest.ggplot(E.aes(x: :area, y: :poptotal)) +
|
|
38
|
+
R.geom_point(E.aes(col: :state, size: :popdensity)) +
|
|
39
|
+
R.geom_smooth(method: "loess", se: false) +
|
|
40
|
+
R.xlim(R.c(0, 0.1)) +
|
|
41
|
+
R.ylim(R.c(0, 500000)) +
|
|
42
|
+
R.labs(subtitle: "Area Vs Population",
|
|
43
|
+
y: "Population",
|
|
44
|
+
x: "Area",
|
|
45
|
+
title: "Scatterplot",
|
|
46
|
+
caption: "Source: midwest")
|
|
47
|
+
|
|
48
|
+
puts gg
|
|
49
|
+
|
|
50
|
+
sleep(2)
|
|
51
|
+
# a = gets.chomp
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Team,League,Year,RS,RA,W,OBP,SLG,BA,Playoffs,RankSeason,RankPlayoffs,G,OOBP,OSLG
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# coding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'galaaz'
|
|
4
|
+
|
|
5
|
+
# This dataset comes from Baseball-Reference.com.
|
|
6
|
+
baseball = R.read__csv("baseball.csv")
|
|
7
|
+
# Lets look at the data available for Momeyball.
|
|
8
|
+
moneyball = baseball.subset(baseball.Year < 2002)
|
|
9
|
+
# Let's see if we can predict the number of wins, by looking at
|
|
10
|
+
# runs allowed (RA) and runs scored (RS). RD is the runs difference.
|
|
11
|
+
# We are making a linear model for predicting wins (W) based on RD
|
|
12
|
+
|
|
13
|
+
moneyball.RD = moneyball.RS - moneyball.RA
|
|
14
|
+
wins_reg = R.lm(+:W =~ +:RD, data: moneyball)
|
|
15
|
+
wins_reg.summary.pp
|
|
16
|
+
|
data/examples/ggplot.rb
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
##########################################################################################
|
|
4
|
+
# @author Rodrigo Botafogo
|
|
5
|
+
#
|
|
6
|
+
# Copyright © 2018 Rodrigo Botafogo. All Rights Reserved. Permission to use, copy, modify,
|
|
7
|
+
# and distribute this software and its documentation, without fee and without a signed
|
|
8
|
+
# licensing agreement, is hereby granted, provided that the above copyright notice, this
|
|
9
|
+
# paragraph and the following two paragraphs appear in all copies, modifications, and
|
|
10
|
+
# distributions.
|
|
11
|
+
#
|
|
12
|
+
# IN NO EVENT SHALL RODRIGO BOTAFOGO BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL,
|
|
13
|
+
# INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF
|
|
14
|
+
# THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF RODRIGO BOTAFOGO HAS BEEN ADVISED OF THE
|
|
15
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
16
|
+
#
|
|
17
|
+
# RODRIGO BOTAFOGO SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
18
|
+
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
|
|
19
|
+
# SOFTWARE AND ACCOMPANYING DOCUMENTATION, IF ANY, PROVIDED HEREUNDER IS PROVIDED "AS IS".
|
|
20
|
+
# RODRIGO BOTAFOGO HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS,
|
|
21
|
+
# OR MODIFICATIONS.
|
|
22
|
+
##########################################################################################
|
|
23
|
+
|
|
24
|
+
require 'galaaz'
|
|
25
|
+
require 'ggplot'
|
|
26
|
+
|
|
27
|
+
module LightBlueTheme
|
|
28
|
+
|
|
29
|
+
#--------------------------------------------------------------------------------------
|
|
30
|
+
# Defines the plot theme (visualization). In this theme we remove major and minor
|
|
31
|
+
# grids, borders and background.
|
|
32
|
+
#--------------------------------------------------------------------------------------
|
|
33
|
+
|
|
34
|
+
def self.global_theme
|
|
35
|
+
# remove major grids
|
|
36
|
+
global_theme = R.theme(panel__grid__major: E.element_blank())
|
|
37
|
+
# remove minor grids
|
|
38
|
+
global_theme = global_theme + R.theme(panel__grid__minor: E.element_blank)
|
|
39
|
+
# remove border
|
|
40
|
+
global_theme = global_theme + R.theme(panel__border: E.element_blank)
|
|
41
|
+
# remove background
|
|
42
|
+
global_theme = global_theme + R.theme(panel__background: E.element_blank)
|
|
43
|
+
# Change axis font
|
|
44
|
+
global_theme = global_theme +
|
|
45
|
+
R.theme(axis__text: E.element_text(size: 8, color: "#000080"))
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
#--------------------------------------------------------------------------------------
|
|
49
|
+
# Creates the graph title, properly formated for this theme
|
|
50
|
+
# @param title [String] The title to add to the graph
|
|
51
|
+
# @return textGrob that can be included in a graph
|
|
52
|
+
#--------------------------------------------------------------------------------------
|
|
53
|
+
|
|
54
|
+
def self.graph_title(title)
|
|
55
|
+
R.textGrob(
|
|
56
|
+
title,
|
|
57
|
+
gp: R.gpar(fontsize: 12, col: "#000080"),
|
|
58
|
+
x: R.unit(0.005, "npc"),
|
|
59
|
+
just: R.c("left", "bottom")
|
|
60
|
+
)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
#--------------------------------------------------------------------------------------
|
|
64
|
+
# Creates the graph subtitle, properly formated for this theme
|
|
65
|
+
# @param subtitle [String] The subtitle to add to the graph
|
|
66
|
+
# @return textGrob that can be included in a graph
|
|
67
|
+
#--------------------------------------------------------------------------------------
|
|
68
|
+
|
|
69
|
+
def self.graph_subtitle(subtitle)
|
|
70
|
+
R.textGrob(
|
|
71
|
+
subtitle,
|
|
72
|
+
gp: R.gpar(fontsize: 10, col: "#000080"),
|
|
73
|
+
x: R.unit(0.005, "npc"),
|
|
74
|
+
just: R.c("left", "bottom")
|
|
75
|
+
)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
#--------------------------------------------------------------------------------------
|
|
79
|
+
# Defines the axis theme (visualization)
|
|
80
|
+
#--------------------------------------------------------------------------------------
|
|
81
|
+
|
|
82
|
+
def self.axis_title
|
|
83
|
+
# format the axis title
|
|
84
|
+
axis_title =
|
|
85
|
+
R.theme(
|
|
86
|
+
axis__title: E.element_text(
|
|
87
|
+
color: "#000080",
|
|
88
|
+
face: "bold",
|
|
89
|
+
size: 8,
|
|
90
|
+
hjust: 1)
|
|
91
|
+
)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
#--------------------------------------------------------------------------------------
|
|
95
|
+
# Define a theme for a bar graph
|
|
96
|
+
#--------------------------------------------------------------------------------------
|
|
97
|
+
|
|
98
|
+
def self.bar_theme
|
|
99
|
+
# remove the y axis
|
|
100
|
+
gr_bar_theme = R.theme(
|
|
101
|
+
axis__line__y: E.element_blank,
|
|
102
|
+
axis__text__y: E.element_blank,
|
|
103
|
+
axis__ticks__y: E.element_blank
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
# adjust the y axis theme
|
|
107
|
+
gr_bar_theme = gr_bar_theme + axis_title
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
#--------------------------------------------------------------------------------------
|
|
111
|
+
# Define a theme for column graphs
|
|
112
|
+
#--------------------------------------------------------------------------------------
|
|
113
|
+
|
|
114
|
+
def self.column_theme
|
|
115
|
+
# remove the x axis
|
|
116
|
+
gr_column_theme = R.theme(
|
|
117
|
+
axis__line__x: E.element_blank,
|
|
118
|
+
axis__text__x: E.element_blank,
|
|
119
|
+
axis__ticks__x: E.element_blank
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
# adjust the x axis theme
|
|
123
|
+
gr_column_theme = gr_column_theme + axis_title
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
R.awt
|
|
129
|
+
|
|
130
|
+
plot = R.grid__arrange(
|
|
131
|
+
LightBlueTheme.graph_title("Cars: wt x mpg"),
|
|
132
|
+
LightBlueTheme.graph_subtitle("1974 Motor Trend US magazine"),
|
|
133
|
+
R.ggplot(~:mtcars, E.aes(x: :wt, y: :mpg)) +
|
|
134
|
+
LightBlueTheme.global_theme + # LightBlueTheme.bar_theme +
|
|
135
|
+
R.geom_bar(stat: "identity", fill: "lightblue"),
|
|
136
|
+
ncol: 1,
|
|
137
|
+
heights: R.c(0.050, 0.025, 0.85, 0.05)
|
|
138
|
+
)
|
|
139
|
+
|
|
140
|
+
plot.print
|
|
141
|
+
|
|
142
|
+
=begin
|
|
143
|
+
sleep(5)
|
|
144
|
+
|
|
145
|
+
# clear the page
|
|
146
|
+
R.grid__newpage
|
|
147
|
+
|
|
148
|
+
# removes the window and creates a new one
|
|
149
|
+
# R.dev__off('')
|
|
150
|
+
# R.awt
|
|
151
|
+
|
|
152
|
+
(R.ggplot(R.mtcars, E.aes(x: :wt, y: :mpg)) +
|
|
153
|
+
R.geom_point('')).print
|
|
154
|
+
=end
|
|
155
|
+
|
|
156
|
+
a = gets.chomp
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
=begin
|
|
160
|
+
# Add border around the plot
|
|
161
|
+
# global_theme = global_theme + theme(plot.background = element_rect(colour = "black", fill=NA, size=1))
|
|
162
|
+
|
|
163
|
+
# Definir tema de gráficos de colunas
|
|
164
|
+
# remover o eixo x
|
|
165
|
+
gr_column_theme = theme(axis.line.x = element_blank(),
|
|
166
|
+
axis.text.x = element_blank(),
|
|
167
|
+
axis.ticks.x = element_blank())
|
|
168
|
+
|
|
169
|
+
# ajustar título dos eixos
|
|
170
|
+
gr_column_theme = gr_column_theme + axis_title
|
|
171
|
+
|
|
172
|
+
# Definir tema para gráfico composto
|
|
173
|
+
gr_comp_theme = axis_title
|
|
174
|
+
|
|
175
|
+
br_acc = function(valor) {
|
|
176
|
+
accounting(valor, big.mark = ".", decimal.mark=",")
|
|
177
|
+
}
|
|
178
|
+
=end
|