minichart 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 144b47573abadc9f4bfe5e41dea006bb24705db37dc93767353ba62d389bdd1d
4
- data.tar.gz: 7c4936f6947307fd106b1e0700fff88c9ad7f5721dfc50dfd23ca3051a79b7b5
3
+ metadata.gz: 7debe086fa2ba7994f1362fa53ab2d5da5cc61a0010f6f08d6ca125cc447bc27
4
+ data.tar.gz: 77dd9cf342830795872c284befe937cba7caa9c2372bdae2b8a42a44e6d4bb13
5
5
  SHA512:
6
- metadata.gz: c66ae222164ccc21a98cd8eddd790f54d114897ed6374b7e36fd242d16364e49ccec532e580d3a180d094c48fd27853f7b01bd85c81e7b8a4af8254a595af191
7
- data.tar.gz: 6d19ce05f98de008d26127b8046512b66e1c68af0972e3b66f15ce3a6bfe4ac8a99a6de76457757e34903e3012b757ba31eeba688a018393304ca8cff41a1e74
6
+ metadata.gz: 5a331fa46640d9bfb32759a5aa160680cd684bd7f57f194e212f7b0d0f5c2af61f03f8b526702de0421dbe608fbc70c39df8c219967b8c2de9fe647f04822e42
7
+ data.tar.gz: 2fede85eef059f2ac6980ff9ba6249b1e7b716edb38eacfe514cebace11488e0cb1ca4520ff4d7a3bf58934e746e846130026c9c98f7bc41419c4216a68c8734
data/README.md CHANGED
@@ -64,7 +64,7 @@ The objects returned from all the mini chart classes are [Victor::SVG][2] object
64
64
 
65
65
  ### Line Chart
66
66
 
67
- <img src='examples/line_chart.svg' align='right'>
67
+ <img src='examples/line_chart.svg' align='right' width=300>
68
68
 
69
69
  ```ruby
70
70
  LineChart.new data, height: 50, background: '#eee',
@@ -73,7 +73,7 @@ LineChart.new data, height: 50, background: '#eee',
73
73
 
74
74
  ### Bar Chart
75
75
 
76
- <img src='examples/bar_chart.svg' align='right'>
76
+ <img src='examples/bar_chart.svg' align='right' width=300>
77
77
 
78
78
  ```ruby
79
79
  BarChart.new data, height: 50, background: '#eee',
@@ -82,7 +82,7 @@ BarChart.new data, height: 50, background: '#eee',
82
82
 
83
83
  ### Area Chart
84
84
 
85
- <img src='examples/area_chart.svg' align='right'>
85
+ <img src='examples/area_chart.svg' align='right' width=300>
86
86
 
87
87
  ```ruby
88
88
  AreaChart.new data, height: 50, background: '#eee',
@@ -107,6 +107,25 @@ dual = HorizontalBarMeter.new 80,
107
107
 
108
108
  Meter charts support [additional options](#meter-options).
109
109
 
110
+ ### Vertical Bar Meter
111
+
112
+ <img src='examples/multiple_vertical_bars.svg' align='right'>
113
+
114
+ ```ruby
115
+ positive = VerticalBarMeter.new 70,
116
+ width: 20, height: 250, background: '#9f9', color: 'green'
117
+
118
+ negative = VerticalBarMeter.new -80,
119
+ width: 20, height: 250, background: '#f99', color: 'red'
120
+
121
+ dual = VerticalBarMeter.new 80,
122
+ width: 20, height: 250, background: '#99f', color: 'blue',
123
+ mode: :dual, zero_line: true
124
+ ```
125
+
126
+ Meter charts support [additional options](#meter-options).
127
+
128
+
110
129
  ## Options
111
130
 
112
131
  ### Basic Options
@@ -117,28 +136,32 @@ All chart classes support a second hash argument for options
117
136
  chart = LineChart.new data, options
118
137
  ```
119
138
 
120
- | Option | Default | Description |
121
- | -------------- | ---------------------------- | ------------------------------------------------------------ |
122
- | `background` | `"white"` | Chart background color |
123
- | `color` | `"#333"` | Chart color |
124
- | `aspect_ratio` | `3` | Set automatic width |
125
- | `height` | `100` | Chart height in pixels |
126
- | `width` | Calculated by `aspect_ratio` | Chart width in pixels |
127
- | `stroke` | `2` | Line stroke width.<br />In `BarChart` determines the gap between bars |
128
- | `style` | *None* | Style hash for the SVG |
139
+ | Option | Default | Description |
140
+ | -------------- | ----------------------------- | ------------------------------------------------------------ |
141
+ | `background` | `"white"` | Chart background color |
142
+ | `color` | `"#333"` | Chart color |
143
+ | `aspect_ratio` | `3` | Set automatic width |
144
+ | `height` | `100`<sup>*</sup> | Chart height in pixels |
145
+ | `width` | Calculated by `aspect_ratio`<sup>*</sup> | Chart width in pixels |
146
+ | `stroke` | `2` | Line stroke width.<br />In `BarChart` determines the gap between bars |
147
+ | `style` | *None* | Style hash for the SVG |
129
148
 
149
+ _* Default dimensions are reversed for horizontal meters - `width` defaults to 100, and `height` is calculated automatically._
130
150
 
131
151
  ### Meter Options
132
152
 
133
153
  Meter charts support these options in additon to the basic options:
134
154
 
135
- | Option | Default | Description |
136
- | ------------------ | --------- | ------------------------------------------------------------ |
137
- | `mode` | `:auto` | Display mode.<br />Can be `:positive`, `:negative`, `:auto` or `:dual` |
138
- | `max` | `100` | The absolute maximum value.<br />This number should be positive even for nengative charts |
139
- | `zero_line` | `false` | If true, mark the zero line |
140
- | `zero_line_stroke` | `4` | Width of the zero line |
141
- | `zero_line_color` | `"black"` | Color of the zero line |
155
+ | Option | Default | Description |
156
+ | -------------------------- | --------- | ------------------------------------------------------------ |
157
+ | `mode` | `:auto` | Display mode.<br />Can be `:positive`, `:negative`, `:auto` or `:dual` |
158
+ | `max` | `100` | The absolute maximum value.<br />This number should be positive even for negative charts |
159
+ | `zero_line` | `false` | If true, mark the zero line |
160
+ | `zero_line_size` | `6` | Size of the zero line |
161
+ | `zero_line_color` | `"black"` | Color of the zero line |
162
+ | `clipping_indicator` | `false` | If true, show when the value exceeds the range |
163
+ | `clipping_indicator_size` | `6` | Size of the clipping indicator |
164
+ | `clipping_indicator_color` | `"yelow"` | Color of the clipping indicator |
142
165
 
143
166
  ## Examples
144
167
 
@@ -6,6 +6,7 @@ require 'minichart/charts/line_chart'
6
6
  require 'minichart/charts/bar_chart'
7
7
  require 'minichart/charts/area_chart'
8
8
  require 'minichart/meters/meter'
9
+ require 'minichart/meters/vertical_bar_meter'
9
10
  require 'minichart/meters/horizontal_bar_meter'
10
11
 
11
12
  require 'byebug' if ENV['BYEBUG']
@@ -7,8 +7,10 @@ module Minichart
7
7
  def initialize(data, opts = {})
8
8
  @data, @opts = data, opts
9
9
 
10
- super height: height, width: width, style: style, viewBox: viewbox
11
- element :rect, x: 0, y: 0, width: width, height: height, fill: background
10
+ # super height: height, width: width, style: style, viewBox: viewbox
11
+ super viewBox: viewbox, style: style
12
+ element :rect, x: 0, y: 0, width: width, height: height,
13
+ fill: background, stroke_width: 0
12
14
 
13
15
  clip_path_id = IDGenerator.next
14
16
  setup_clip_path clip_path_id
@@ -3,6 +3,7 @@ module Minichart
3
3
  def build
4
4
  draw_bar
5
5
  draw_zero_line if zero_line
6
+ draw_clipping_indicator if clipping_indicator and clipping?
6
7
  end
7
8
 
8
9
  protected
@@ -20,62 +21,38 @@ module Minichart
20
21
  element :rect, x: x, y: 0, height: height, width: bar_width, style: style
21
22
  end
22
23
 
23
- def draw_zero_line
24
- x = if mode == :negative
25
- width-zero_line_stroke
26
- elsif mode == :dual
27
- width / 2 - zero_line_stroke / 2
24
+ def draw_clipping_indicator
25
+ x = if mode == :positive or (mode == :dual and value > 0)
26
+ width - clipping_indicator_size
28
27
  else
29
28
  0
30
29
  end
31
30
 
32
31
  element :rect, x: x, y: 0,
33
- height: height, width: zero_line_stroke,
34
- fill: zero_line_color
32
+ height: height, width: clipping_indicator_size,
33
+ fill: clipping_indicator_color, stroke_width: 0
35
34
 
36
35
  end
37
36
 
38
- def mode
39
- opts[:mode] ||= :auto
40
-
41
- if opts[:mode] == :auto
42
- value >= 0 ? :positive : :negative
37
+ def draw_zero_line
38
+ x = if mode == :negative
39
+ width - zero_line_size
40
+ elsif mode == :dual
41
+ width / 2 - zero_line_size / 2
43
42
  else
44
- opts[:mode]
43
+ 0
45
44
  end
46
- end
47
-
48
- def max
49
- opts[:max] ||= 100
50
- end
51
-
52
- def zero_line
53
- opts[:zero_line]
54
- end
55
45
 
56
- def zero_line_stroke
57
- opts[:zero_line_stroke] || 6
58
- end
46
+ element :rect, x: x, y: 0,
47
+ height: height, width: zero_line_size,
48
+ fill: zero_line_color, stroke_width: 0
59
49
 
60
- def zero_line_color
61
- opts[:zero_line_color] || 'black'
62
50
  end
63
51
 
64
52
  def width_factor
65
53
  width / max.to_f
66
54
  end
67
55
 
68
- def clamped_value
69
- case mode
70
- when :positive
71
- value.clamp 0, max
72
- when :negative
73
- value.clamp -max, 0
74
- when :dual
75
- value.clamp -max, max
76
- end
77
- end
78
-
79
56
  def bar_width
80
57
  if mode == :dual
81
58
  clamped_value.abs * width_factor * 0.5
@@ -83,9 +60,5 @@ module Minichart
83
60
  clamped_value.abs * width_factor
84
61
  end
85
62
  end
86
-
87
- def style
88
- { fill: color, stroke_width: stroke, stroke: background }
89
- end
90
63
  end
91
64
  end
@@ -1,8 +1,73 @@
1
1
  module Minichart
2
2
  # Base class for charts with a single value
3
3
  class Meter < Base
4
+
5
+ protected
6
+
4
7
  def value
5
8
  data
6
9
  end
10
+
11
+ def clipping?
12
+ value > max || value < -max
13
+ end
14
+
15
+ def mode
16
+ @mode ||= mode!
17
+ end
18
+
19
+ def mode!
20
+ opts[:mode] ||= :auto
21
+
22
+ if opts[:mode] == :auto
23
+ value >= 0 ? :positive : :negative
24
+ else
25
+ opts[:mode].to_sym
26
+ end
27
+ end
28
+
29
+ def max
30
+ opts[:max] ||= 100
31
+ end
32
+
33
+ def zero_line
34
+ opts[:zero_line]
35
+ end
36
+
37
+ def zero_line_size
38
+ opts[:zero_line_size] ||= 6
39
+ end
40
+
41
+ def zero_line_color
42
+ opts[:zero_line_color] ||= 'black'
43
+ end
44
+
45
+ def clipping_indicator
46
+ opts[:clipping_indicator]
47
+ end
48
+
49
+ def clipping_indicator_size
50
+ opts[:clipping_indicator_size] ||= 6
51
+ end
52
+
53
+ def clipping_indicator_color
54
+ opts[:clipping_indicator_color] ||= 'yellow'
55
+ end
56
+
57
+ def clamped_value
58
+ case mode
59
+ when :positive
60
+ value.clamp 0, max
61
+ when :negative
62
+ value.clamp -max, 0
63
+ when :dual
64
+ value.clamp -max, max
65
+ end
66
+ end
67
+
68
+ def style
69
+ { fill: color, stroke_width: stroke, stroke: background }
70
+ end
71
+
7
72
  end
8
73
  end
@@ -0,0 +1,72 @@
1
+ module Minichart
2
+ class VerticalBarMeter < Meter
3
+ def build
4
+ draw_bar
5
+ draw_zero_line if zero_line
6
+ draw_clipping_indicator if clipping_indicator and clipping?
7
+ end
8
+
9
+ protected
10
+
11
+ def width
12
+ opts[:width] ||= 100
13
+ end
14
+
15
+ def height
16
+ opts[:height] ||= (aspect_ratio * width).round
17
+ end
18
+
19
+ def draw_bar
20
+ y = if mode == :positive
21
+ height - bar_height
22
+ elsif mode == :dual
23
+ middle = height * 0.5
24
+ value >= 0 ? middle - bar_height : middle
25
+ else
26
+ 0
27
+ end
28
+
29
+ element :rect, x: 0, y: y, height: bar_height, width: width, style: style
30
+ end
31
+
32
+ def draw_clipping_indicator
33
+ y = if mode == :negative or (mode == :dual and value < 0)
34
+ height - clipping_indicator_size
35
+ else
36
+ 0
37
+ end
38
+
39
+ element :rect, x: 0, y: y,
40
+ height: clipping_indicator_size, width: width,
41
+ fill: clipping_indicator_color, stroke_width: 0
42
+
43
+ end
44
+
45
+ def draw_zero_line
46
+ y = if mode == :positive
47
+ height - zero_line_size
48
+ elsif mode == :dual
49
+ height / 2 - zero_line_size / 2
50
+ else
51
+ 0
52
+ end
53
+
54
+ element :rect, x: 0, y: y,
55
+ height: zero_line_size, width: width,
56
+ fill: zero_line_color, stroke_width: 0
57
+
58
+ end
59
+
60
+ def height_factor
61
+ height / max.to_f
62
+ end
63
+
64
+ def bar_height
65
+ if mode == :dual
66
+ clamped_value.abs * height_factor * 0.5
67
+ else
68
+ clamped_value.abs * height_factor
69
+ end
70
+ end
71
+ end
72
+ end
@@ -1,3 +1,3 @@
1
1
  module Minichart
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minichart
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danny Ben Shitrit
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-29 00:00:00.000000000 Z
11
+ date: 2020-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: victor
@@ -40,6 +40,7 @@ files:
40
40
  - lib/minichart/id_generator.rb
41
41
  - lib/minichart/meters/horizontal_bar_meter.rb
42
42
  - lib/minichart/meters/meter.rb
43
+ - lib/minichart/meters/vertical_bar_meter.rb
43
44
  - lib/minichart/version.rb
44
45
  homepage: https://github.com/DannyBen/minichart
45
46
  licenses:
@@ -53,7 +54,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
53
54
  requirements:
54
55
  - - ">="
55
56
  - !ruby/object:Gem::Version
56
- version: 2.4.0
57
+ version: 2.5.0
57
58
  required_rubygems_version: !ruby/object:Gem::Requirement
58
59
  requirements:
59
60
  - - ">="