galaaz 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|