prawn-graph 0.9.2 → 0.9.3
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 +4 -4
- data/README.md +30 -13
- data/lib/prawn/graph/chart_components/series_renderer.rb +65 -0
- data/lib/prawn/graph/series.rb +8 -0
- data/lib/prawn/graph/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e781761d7d174b22bde7030b5987e8e59c99a69f
|
4
|
+
data.tar.gz: 9102428b3c801fb0c1e32daf04912a0ef7866c65
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 155310ed2dde8d1375d42632af91b7f78c7f9f032f026f795ad437cbb2a6eeba318e62ac5ef6753751ec4e10903576e1b312be2377f0a97fa55fb2b30f86a9e3
|
7
|
+
data.tar.gz: d845d5ad0201e5e2b549a022b6ab66170121748f4c5e989e739917b75c541e3098c6f03c76c26b602109bb34b375d4b17790f7fb7266214b6218fb005f9d44f0
|
data/README.md
CHANGED
@@ -77,37 +77,54 @@ adventurous - please add it!
|
|
77
77
|
|
78
78
|
## Using prawn-graph
|
79
79
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
series << Prawn::Graph::Series.new([1,2,3,4,5], title: "Some numbers", type: :bar)
|
80
|
+
Graphs can be created by calling the `graph` or its alias, `chart` method with an array of
|
81
|
+
`Prawn::Graph::Series` objects representing the data you would like to plot and how it should
|
82
|
+
be displayed. It will also take a hash of options, and block which will have the graph yeilded
|
83
|
+
to it.
|
85
84
|
|
86
|
-
|
87
|
-
|
88
|
-
end
|
85
|
+
```ruby
|
86
|
+
graph data, options = {}, &block.
|
89
87
|
```
|
90
88
|
|
91
89
|
When called with just a set of data, prawn-graph will do its best to make the graph fit in the
|
92
90
|
available space. For a little more control over how the graphs are rendered in the document
|
93
|
-
you can pass the following options
|
91
|
+
you can pass the following options to `graph` or `chart`:
|
94
92
|
|
95
93
|
Option | Data type | Description
|
96
94
|
----------- | --------- | -----------
|
97
95
|
:at | [integer, integer] | Specify the location on the page you want the graph to appear.
|
98
96
|
:width | integer | Desired width of the graph. Defaults to horizontal space available.
|
99
97
|
:height | integer | Desired height of the graph. Defaults to vertical space available.
|
98
|
+
:title | string | The overall title for your chart
|
99
|
+
:series_key | boolean | Should we render the series key for multi series graphs? Defaults to true.
|
100
|
+
|
101
|
+
The `data` passed to `graph` or `chart` should be an `Array` of `Prawn::Graph::Series` objects, which
|
102
|
+
themselves are made up of an array of data points to plot, and a series of options.
|
103
|
+
|
104
|
+
```ruby
|
105
|
+
Prawn::Graph::Series.new [1,2,3,4], options = {}
|
106
|
+
```
|
107
|
+
|
108
|
+
Valid `options` are:
|
109
|
+
|
110
|
+
Option | Data type | Description
|
111
|
+
------------- | --------- | -----------
|
112
|
+
:mark_average | boolean | Should we mark a line showing the average value of the series? Defaults to false.
|
113
|
+
:mark_minimum | boolean | Should we mark the minimum value of the series? Defaults to false.
|
114
|
+
:mark_maximum | boolean | Should we mark the maximum value of the series? Defaults to false.
|
115
|
+
:title | string | The title of this series, which will be shown in the series key.
|
116
|
+
:type | symbol | How this series should be rendered. Defaults to `:bar`, valid options are `:bar`, `:line`.
|
100
117
|
|
101
|
-
###
|
118
|
+
### Show me some code!
|
102
119
|
|
103
120
|
```ruby
|
104
121
|
require 'prawn-graph'
|
105
122
|
|
106
123
|
series = []
|
107
|
-
series << Prawn::Graph::Series.new([4,9,3,2,1,6,2,8,2,3,4,9,2], title: "A label for a series", type: :bar
|
108
|
-
series << Prawn::Graph::Series.new([5,4,3,2,7,9,2,8,7,5,4,9,2].reverse, title: "Another label", type: :line, mark_average: true)
|
124
|
+
series << Prawn::Graph::Series.new([4,9,3,2,1,6,2,8,2,3,4,9,2], title: "A label for a series", type: :bar)
|
125
|
+
series << Prawn::Graph::Series.new([5,4,3,2,7,9,2,8,7,5,4,9,2].reverse, title: "Another label", type: :line, mark_average: true, mark_minimum: true)
|
109
126
|
series << Prawn::Graph::Series.new([1,2,3,4,5,9,6,4,5,6,3,2,11], title: "Yet another label", type: :bar)
|
110
|
-
series << Prawn::Graph::Series.new([1,2,3,4,5,12,6,4,5,6,3,2,9].shuffle, title: "One final label", type: :line, mark_average: true)
|
127
|
+
series << Prawn::Graph::Series.new([1,2,3,4,5,12,6,4,5,6,3,2,9].shuffle, title: "One final label", type: :line, mark_average: true, mark_maximum: true)
|
111
128
|
|
112
129
|
Prawn::Document.generate('test.pdf') do
|
113
130
|
graph series, width: 500, height: 200, title: "A Title for the chart", at: [10,700]
|
@@ -33,6 +33,9 @@ module Prawn
|
|
33
33
|
prawn.bounding_box [@graph_area.point[0] + 5, @graph_area.point[1] - 20], width: @plot_area_width, height: @plot_area_height do
|
34
34
|
j = 2
|
35
35
|
prawn.save_graphics_state do
|
36
|
+
max_marked = false
|
37
|
+
min_marked = false
|
38
|
+
|
36
39
|
@series.values.each_with_index do |v, i|
|
37
40
|
next if i == 0
|
38
41
|
|
@@ -59,6 +62,36 @@ module Prawn
|
|
59
62
|
prawn.fill_color = @canvas.theme.markers
|
60
63
|
prawn.fill_ellipse([ ( previous_x_offset), previous_y ], 1)
|
61
64
|
prawn.fill_ellipse([ ( this_x_offset), this_y ], 1)
|
65
|
+
|
66
|
+
if @series.mark_minimum? && min_marked == false && previous_value == @series.min
|
67
|
+
prawn.save_graphics_state do
|
68
|
+
prawn.fill_color = @canvas.theme.min
|
69
|
+
prawn.stroke_color = @canvas.theme.min
|
70
|
+
prawn.line_width = 1
|
71
|
+
|
72
|
+
prawn.dash(2)
|
73
|
+
prawn.stroke_line([previous_x_offset, 0], [previous_x_offset, previous_y])
|
74
|
+
prawn.undash
|
75
|
+
|
76
|
+
prawn.fill_ellipse([ ( previous_x_offset), previous_y ], 2)
|
77
|
+
min_marked = true
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
if @series.mark_maximum? && max_marked == false && previous_value == @series.max
|
82
|
+
prawn.save_graphics_state do
|
83
|
+
prawn.fill_color = @canvas.theme.max
|
84
|
+
prawn.stroke_color = @canvas.theme.max
|
85
|
+
prawn.line_width = 1
|
86
|
+
|
87
|
+
prawn.dash(2)
|
88
|
+
prawn.stroke_line([previous_x_offset, 0], [previous_x_offset, previous_y])
|
89
|
+
prawn.undash
|
90
|
+
|
91
|
+
prawn.fill_ellipse([ ( previous_x_offset), previous_y ], 2)
|
92
|
+
max_marked = true
|
93
|
+
end
|
94
|
+
end
|
62
95
|
j += 1
|
63
96
|
end
|
64
97
|
|
@@ -131,6 +164,8 @@ module Prawn
|
|
131
164
|
num_points = @series[0].size
|
132
165
|
width_per_point = (@plot_area_width / num_points).round(2).to_f
|
133
166
|
width = ((width_per_point * BigDecimal('0.9')) / @series.size).round(2).to_f
|
167
|
+
min_marked = false
|
168
|
+
max_marked = false
|
134
169
|
|
135
170
|
num_points.times do |point|
|
136
171
|
|
@@ -155,6 +190,36 @@ module Prawn
|
|
155
190
|
prawn.stroke_line([0, average_y_coordinate], [ @plot_area_width, average_y_coordinate ])
|
156
191
|
prawn.undash
|
157
192
|
end
|
193
|
+
|
194
|
+
if @series[series_index].mark_minimum? && min_marked == false && @series[series_index].values[point] == @series[series_index].min
|
195
|
+
prawn.save_graphics_state do
|
196
|
+
prawn.fill_color = @canvas.theme.min
|
197
|
+
prawn.stroke_color = @canvas.theme.min
|
198
|
+
prawn.line_width = 1
|
199
|
+
|
200
|
+
prawn.dash(2)
|
201
|
+
prawn.stroke_line([x_position, 0], [x_position, y_position])
|
202
|
+
prawn.undash
|
203
|
+
|
204
|
+
prawn.fill_ellipse([x_position, y_position ], 2)
|
205
|
+
min_marked = true
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
if @series[series_index].mark_maximum? && max_marked == false && @series[series_index].values[point] == @series[series_index].max
|
210
|
+
prawn.save_graphics_state do
|
211
|
+
prawn.fill_color = @canvas.theme.max
|
212
|
+
prawn.stroke_color = @canvas.theme.max
|
213
|
+
prawn.line_width = 1
|
214
|
+
|
215
|
+
prawn.dash(2)
|
216
|
+
prawn.stroke_line([x_position, 0], [x_position, y_position])
|
217
|
+
prawn.undash
|
218
|
+
|
219
|
+
prawn.fill_ellipse([x_position, y_position ], 2)
|
220
|
+
max_marked = true
|
221
|
+
end
|
222
|
+
end
|
158
223
|
end
|
159
224
|
|
160
225
|
end
|
data/lib/prawn/graph/series.rb
CHANGED
@@ -71,6 +71,14 @@ module Prawn
|
|
71
71
|
options.mark_average == true
|
72
72
|
end
|
73
73
|
|
74
|
+
def mark_minimum?
|
75
|
+
options.mark_minimum == true
|
76
|
+
end
|
77
|
+
|
78
|
+
def mark_maximum?
|
79
|
+
options.mark_maximum == true
|
80
|
+
end
|
81
|
+
|
74
82
|
# @deprecated Provided to allow for tempory backwards compatibilty with legacy graph drawing. Do not use.
|
75
83
|
# @return [Array] Series represented as an array in the format [ title, val1, val2... ]
|
76
84
|
#
|
data/lib/prawn/graph/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: prawn-graph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Stenhouse
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2016-06-
|
12
|
+
date: 2016-06-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|