technical_graph 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -123,17 +123,18 @@ size will be enlarged to maintain set distanced between axis.
123
123
 
124
124
  Legend options:
125
125
 
126
- * options[:legend] - draw legend, default false
126
+ * options[:legend] - do you want to draw legend?, default false
127
127
  * options[:legend_auto] - let legend position to be chosen by algorithm, default true
128
128
  * options[:legend_width] - width used for setting proper distance while drawing on right, default 100, legend height is calculated
129
129
  * options[:legend_margin] - graph margin used not to draw legend on border, default 50
130
- * options[:legend_x] - legend X position, default 50
131
- * options[:legend_y] - legend Y position, default 50
130
+ * options[:legend_x] - legend X position, used when options[:legend_auto] is false, default 50
131
+ * options[:legend_y] - legend Y position, used when options[:legend_auto] is false, default 50
132
132
 
133
133
 
134
134
  Layer options Hash
135
135
  ------------------
136
136
 
137
+ * layer_options[:label] - label used in legend
137
138
  * layer_options[:color] - color of graph layer, ex.: 'red', 'green', '#FFFF00'
138
139
  * layer_options[:antialias] - use anti-aliasing for this, default false, override options[:layers_antialias]
139
140
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.2.0
@@ -1,5 +1,7 @@
1
1
  #encoding: utf-8
2
2
 
3
+ require 'technical_graph/graph_color_library'
4
+
3
5
  # Stores only data used for one layer
4
6
  # Instances of this class are used elsewhere
5
7
  # Stores also drawing parameters for one layer
@@ -9,6 +11,9 @@ class DataLayer
9
11
  def initialize(d = [], options = { })
10
12
  @data_params = options
11
13
 
14
+ @data_params[:color] ||= GraphColorLibrary.instance.get_color
15
+ @data_params[:label] ||= ''
16
+
12
17
  # set data and append initial data
13
18
  clear_data
14
19
  append_data(d)
@@ -33,7 +38,7 @@ class DataLayer
33
38
 
34
39
  # Color of
35
40
  def color
36
- return @data_params[:color] || 'blue'
41
+ return @data_params[:color]
37
42
  end
38
43
 
39
44
  def antialias
@@ -41,7 +46,7 @@ class DataLayer
41
46
  end
42
47
 
43
48
  def label
44
- return @data_params[:label] || '' #'data'
49
+ return @data_params[:label]
45
50
  end
46
51
 
47
52
  # Clear data
@@ -0,0 +1,52 @@
1
+ #encoding: utf-8
2
+
3
+ require 'singleton'
4
+
5
+ # Used for auto color grabber
6
+
7
+ class GraphColorLibrary
8
+ include Singleton
9
+
10
+ # http://www.imagemagick.org/script/color.php
11
+ BASIC_COLORS = [
12
+ 'blue',
13
+ 'red',
14
+ 'green',
15
+ 'purple'
16
+ ]
17
+
18
+ ADDITIONAL_COLORS = [
19
+ 'tomato',
20
+ 'sienna1',
21
+ 'chocolate2',
22
+ 'DarkGoldenrod4',
23
+ 'OliveDrab4',
24
+ 'ForestGreen',
25
+ 'turquoise',
26
+ 'DarkCyan',
27
+ 'CadetBlue4',
28
+ 'DeepSkyBlue4',
29
+ 'DodgerBlue2',
30
+ 'CornflowerBlue',
31
+ 'MidnightBlue',
32
+ 'MediumPurple3',
33
+ 'magenta4',
34
+ 'orchid4',
35
+ 'DeepPink3',
36
+ 'PaleVioletRed4',
37
+ 'firebrick3'
38
+ ]
39
+
40
+ FAIL_COLOR = 'black'
41
+
42
+ def initialize
43
+ @colors = BASIC_COLORS + ADDITIONAL_COLORS.sort {rand}
44
+ end
45
+
46
+ def get_color
47
+ color = @colors.shift
48
+ return FAIL_COLOR if color.nil?
49
+ return color
50
+ end
51
+
52
+ end
@@ -0,0 +1,91 @@
1
+ require 'helper'
2
+
3
+ class TestTechnicalAutocolor < Test::Unit::TestCase
4
+ context 'initial options' do
5
+ should 'draw multilayer graph' do
6
+ @tg = TechnicalGraph.new(
7
+ {
8
+ :truncate_string => "%.1f",
9
+
10
+ :x_axis_label => 'x',
11
+ :y_axis_label => 'y',
12
+
13
+ :axis_antialias => true,
14
+ :layers_antialias => true,
15
+ :font_antialias => true,
16
+
17
+ :layers_font_size => 11,
18
+ :axis_font_size => 11,
19
+ :axis_label_font_size => 20,
20
+
21
+ #:x_axis_count => 20,
22
+ #:y_axis_count => 20,
23
+ #:x_axis_interval => 1.0,
24
+ #:y_axis_interval => 1.0,
25
+ #:x_axis_fixed_interval => false,
26
+ #:y_axis_fixed_interval => false,
27
+
28
+ #:x_min => -10.0,
29
+ #:x_max => 10.0,
30
+ #:y_min => -10.0,
31
+ #:y_max => 10.0,
32
+
33
+ #:width => 4000,
34
+ #:height => 3000,
35
+
36
+ :legend => true,
37
+ :legend_auto => true,
38
+ :legend_width => 90,
39
+ :legend_margin => 60,
40
+ :legend_x => 50,
41
+ :legend_y => 50,
42
+ }
43
+ )
44
+
45
+ max = 50
46
+
47
+ # adding simple layer
48
+ layer_params_a = {
49
+ :antialias => true,
50
+ :label => 'first'
51
+ }
52
+ layer_params_b = {
53
+ :antialias => true,
54
+ :label => 'second'
55
+ }
56
+ layer_params_c = {
57
+ :antialias => true,
58
+ :label => 'third'
59
+ }
60
+ layer_params_d = {
61
+ :antialias => true,
62
+ :label => 'fourth'
63
+ }
64
+ layer_data_a = Array.new
65
+ layer_data_b = Array.new
66
+ layer_data_c = Array.new
67
+ layer_data_d = Array.new
68
+ (0..max).each do |i|
69
+ layer_data_a << { :x => -10.0 + i.to_f, :y => 10.0 * Math.cos(i.to_f * (4.0 * 3.14 / max.to_f)) }
70
+ layer_data_b << { :x => -10.0 + i.to_f, :y => 10.0 * Math.cos(0.3 + i.to_f * (4.0 * 3.14 / max.to_f)) }
71
+ layer_data_c << { :x => -10.0 + i.to_f, :y => 10.0 * Math.cos(0.6 + i.to_f * (4.0 * 3.14 / max.to_f)) }
72
+ layer_data_d << { :x => -10.0 + i.to_f, :y => 10.0 * Math.cos(0.9 + i.to_f * (4.0 * 3.14 / max.to_f)) }
73
+ end
74
+ @tg.add_layer(layer_data_a, layer_params_a)
75
+ @tg.add_layer(layer_data_b, layer_params_b)
76
+ @tg.add_layer(layer_data_c, layer_params_c)
77
+ @tg.add_layer(layer_data_d, layer_params_d)
78
+
79
+
80
+ @tg.layers.last.data.size.should > 0
81
+ @tg.layers.size.should == 4
82
+
83
+ @tg.render
84
+
85
+ @tg.image_drawer.save_to_file('test_autocolor.png')
86
+ @tg.image_drawer.to_png.class.should == String
87
+
88
+ end
89
+ end
90
+
91
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: technical_graph
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 1
9
8
  - 2
10
- version: 0.1.2
9
+ - 0
10
+ version: 0.2.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Aleksander Kwiatkowski
@@ -123,9 +123,11 @@ files:
123
123
  - lib/technical_graph.rb
124
124
  - lib/technical_graph/data_layer.rb
125
125
  - lib/technical_graph/graph_axis.rb
126
+ - lib/technical_graph/graph_color_library.rb
126
127
  - lib/technical_graph/graph_data_processor.rb
127
128
  - lib/technical_graph/graph_image_drawer.rb
128
129
  - test/helper.rb
130
+ - test/test_technical_autocolor.rb
129
131
  - test/test_technical_axis_enlarge.rb
130
132
  - test/test_technical_graph.rb
131
133
  - test/test_technical_graph_axis.rb