scruffy 0.2.6 → 0.3.0.beta1
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.
- data/{History.txt → CHANGES.txt} +15 -12
- data/README.txt +25 -25
- data/lib/scruffy.rb +0 -5
- data/lib/scruffy/components.rb +1 -0
- data/lib/scruffy/components/axes.rb +23 -0
- data/lib/scruffy/components/background.rb +3 -3
- data/lib/scruffy/components/base.rb +3 -0
- data/lib/scruffy/components/data_markers.rb +23 -8
- data/lib/scruffy/components/graphs.rb +4 -0
- data/lib/scruffy/components/grid.rb +45 -4
- data/lib/scruffy/components/legend.rb +63 -21
- data/lib/scruffy/components/title.rb +1 -1
- data/lib/scruffy/components/value_markers.rb +9 -16
- data/lib/scruffy/formatters.rb +41 -3
- data/lib/scruffy/graph.rb +27 -11
- data/lib/scruffy/graph_state.rb +5 -0
- data/lib/scruffy/helpers.rb +1 -0
- data/lib/scruffy/helpers/layer_container.rb +28 -4
- data/lib/scruffy/helpers/marker_helper.rb +25 -0
- data/lib/scruffy/helpers/point_container.rb +46 -17
- data/lib/scruffy/layers.rb +6 -1
- data/lib/scruffy/layers/bar.rb +35 -14
- data/lib/scruffy/layers/base.rb +51 -21
- data/lib/scruffy/layers/box.rb +114 -0
- data/lib/scruffy/layers/line.rb +31 -14
- data/lib/scruffy/layers/multi.rb +74 -0
- data/lib/scruffy/layers/multi_area.rb +119 -0
- data/lib/scruffy/layers/multi_bar.rb +51 -0
- data/lib/scruffy/layers/scatter.rb +13 -5
- data/lib/scruffy/layers/stacked.rb +2 -1
- data/lib/scruffy/rasterizers.rb +1 -0
- data/lib/scruffy/rasterizers/mini_magick_rasterizer.rb +24 -0
- data/lib/scruffy/rasterizers/rmagick_rasterizer.rb +8 -2
- data/lib/scruffy/renderers.rb +2 -0
- data/lib/scruffy/renderers/axis_legend.rb +41 -0
- data/lib/scruffy/renderers/base.rb +6 -4
- data/lib/scruffy/renderers/basic.rb +20 -0
- data/lib/scruffy/renderers/standard.rb +7 -6
- data/lib/scruffy/themes.rb +37 -1
- data/lib/scruffy/version.rb +1 -7
- data/spec/output/array.svg +55 -0
- data/spec/output/hash.svg +55 -0
- data/spec/scruffy/graph_spec.rb +4 -4
- data/spec/scruffy/layers/base_spec.rb +15 -10
- metadata +84 -96
- data/CHANGES +0 -104
- data/License.txt +0 -20
- data/MIT-LICENSE +0 -20
- data/Manifest.txt +0 -104
- data/PostInstall.txt +0 -6
- data/README +0 -9
- data/Rakefile +0 -108
- data/config/hoe.rb +0 -78
- data/config/requirements.rb +0 -15
- data/script/console +0 -10
- data/script/destroy +0 -14
- data/script/generate +0 -14
- data/script/txt2html +0 -82
- data/setup.rb +0 -1585
- data/spec/scruffy/layers/line_spec.rb +0 -10
- data/tasks/deployment.rake +0 -34
- data/tasks/environment.rake +0 -7
- data/tasks/website.rake +0 -17
- data/test/graph_creation_test.rb +0 -101
- data/test/test_helper.rb +0 -2
- data/website/images/blank.gif.html +0 -7
- data/website/images/graphs/all_smiles.png +0 -0
- data/website/images/graphs/bar_test.png +0 -0
- data/website/images/graphs/bar_test.svg +0 -71
- data/website/images/graphs/line_test.png +0 -0
- data/website/images/graphs/line_test.svg +0 -60
- data/website/images/graphs/multi_test.png +0 -0
- data/website/images/graphs/multi_test.svg +0 -296
- data/website/images/graphs/pie_test.png +0 -0
- data/website/images/graphs/pie_test.svg +0 -40
- data/website/images/graphs/split_test.png +0 -0
- data/website/images/graphs/split_test.svg +0 -295
- data/website/images/graphs/stacking_test.png +0 -0
- data/website/images/graphs/stacking_test.svg +0 -146
- data/website/images/header.png +0 -0
- data/website/images/header_gradient.png +0 -0
- data/website/images/overlay.png +0 -0
- data/website/images/scruffy.png +0 -0
- data/website/index.html +0 -225
- data/website/index.txt +0 -204
- data/website/javascripts/application.js +0 -2
- data/website/javascripts/controls.js +0 -815
- data/website/javascripts/dragdrop.js +0 -913
- data/website/javascripts/effects.js +0 -958
- data/website/javascripts/lightbox.js +0 -437
- data/website/javascripts/prototype.js +0 -2006
- data/website/javascripts/rounded_corners_lite.inc.js +0 -285
- data/website/stylesheets/lightbox.css +0 -27
- data/website/stylesheets/screen.css +0 -147
- data/website/stylesheets/scruffy.css +0 -227
- data/website/template.html.erb +0 -47
@@ -0,0 +1,51 @@
|
|
1
|
+
module Scruffy::Layers
|
2
|
+
# ==Scruffy::Layers::MultiBar
|
3
|
+
#
|
4
|
+
# Author:: Jeremy Green
|
5
|
+
# Date:: July 29th, 2009
|
6
|
+
#
|
7
|
+
# Based on:: Scruffy::Layers::Bar by
|
8
|
+
# Author:: Brasten Sager
|
9
|
+
# Date:: August 6th, 2006
|
10
|
+
#
|
11
|
+
# Standard multi_bar graph.
|
12
|
+
class MultiBar < Bar
|
13
|
+
|
14
|
+
|
15
|
+
|
16
|
+
protected
|
17
|
+
|
18
|
+
# Due to the size of the bar graph, X-axis coords must
|
19
|
+
# be squeezed so that the bars do not hang off the ends
|
20
|
+
# of the graph.
|
21
|
+
#
|
22
|
+
# Unfortunately this just mean that bar-graphs and most other graphs
|
23
|
+
# end up on different points. Maybe adding a padding to the coordinates
|
24
|
+
# should be a graph-wide thing?
|
25
|
+
#
|
26
|
+
# Update : x-axis coords for lines and area charts should now line
|
27
|
+
# up with the center of bar charts.
|
28
|
+
|
29
|
+
def generate_coordinates(options = {})
|
30
|
+
@point_width = (width / points.size)
|
31
|
+
@point_space = @point_width * 0.1
|
32
|
+
@point_width = @point_width - @point_space
|
33
|
+
@bar_width = @point_width/options[:num_bars]
|
34
|
+
@bar_space = @bar_width * 0.1
|
35
|
+
@bar_width = @bar_width * 0.9
|
36
|
+
|
37
|
+
#options[:point_distance] = (width - (width / points.size)) / (points.size - 1).to_f
|
38
|
+
|
39
|
+
#TODO more array work with index, try to rework to be accepting of hashes
|
40
|
+
coords = (0...points.size).map do |idx|
|
41
|
+
|
42
|
+
x_coord = (@point_width * idx) + @point_space/2 + @point_space*idx + @bar_width * options[:position] + @bar_space*(options[:position].to_f - 0.5)
|
43
|
+
|
44
|
+
relative_percent = ((points[idx] == min_value) ? 0 : ((points[idx] - min_value) / (max_value - min_value).to_f))
|
45
|
+
y_coord = (height - (height * relative_percent))
|
46
|
+
[x_coord, y_coord]
|
47
|
+
end
|
48
|
+
coords
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -7,15 +7,23 @@ module Scruffy::Layers
|
|
7
7
|
# Simple scatter graph
|
8
8
|
class Scatter < Base
|
9
9
|
|
10
|
+
include Scruffy::Helpers::Marker
|
11
|
+
|
10
12
|
# Renders scatter graph.
|
11
13
|
def draw(svg, coords, options={})
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
14
|
+
|
15
|
+
options.merge!(@options)
|
16
|
+
|
17
|
+
if options[:shadow]
|
18
|
+
svg.g(:class => 'shadow', :transform => "translate(#{relative(0.5)}, #{relative(0.5)})") {
|
19
|
+
coords.each { |coord| svg.circle( :cx => coord.first, :cy => coord.last + relative(0.9), :r => relative(2),
|
20
|
+
:style => "stroke-width: #{relative(2)}; stroke: black; opacity: 0.35;" ) }
|
21
|
+
}
|
22
|
+
end
|
16
23
|
|
17
24
|
coords.each { |coord| svg.circle( :cx => coord.first, :cy => coord.last, :r => relative(2),
|
18
25
|
:style => "stroke-width: #{relative(2)}; stroke: #{color.to_s}; fill: #{color.to_s}" ) }
|
19
26
|
end
|
20
27
|
end
|
21
|
-
end
|
28
|
+
end
|
29
|
+
|
@@ -31,7 +31,7 @@ module Scruffy::Layers
|
|
31
31
|
# Overrides Base#render to fiddle with layers' points to achieve a stacked effect.
|
32
32
|
def render(svg, options = {})
|
33
33
|
#TODO ensure this works with new points
|
34
|
-
current_points = points
|
34
|
+
current_points = points
|
35
35
|
|
36
36
|
layers.each do |layer|
|
37
37
|
real_points = layer.points
|
@@ -63,6 +63,7 @@ module Scruffy::Layers
|
|
63
63
|
def points
|
64
64
|
longest_arr = layers.inject(nil) do |longest, layer|
|
65
65
|
longest = layer.points if (longest.nil? || longest.size < layer.points.size)
|
66
|
+
longest
|
66
67
|
end
|
67
68
|
|
68
69
|
summed_points = (0...longest_arr.size).map do |idx|
|
data/lib/scruffy/rasterizers.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
module Scruffy::Rasterizers
|
2
|
+
|
3
|
+
# == MiniMagickRasterizer
|
4
|
+
#
|
5
|
+
# Author:: Tim Connor
|
6
|
+
# Date:: Feb 9th, 2010
|
7
|
+
#
|
8
|
+
# The MiniMagickRasterizer converts SVG graphs to images using MiniMagick.
|
9
|
+
class MiniMagickRasterizer
|
10
|
+
def rasterize(svg, options={})
|
11
|
+
require 'mini_magick'
|
12
|
+
|
13
|
+
image = MiniMagick::Image::from_blob(svg)
|
14
|
+
|
15
|
+
image.format(options[:as]) do |cmd|
|
16
|
+
cmd.background "#0000" # Transparent background
|
17
|
+
end if options[:as]
|
18
|
+
|
19
|
+
image.write(options[:to]) if options[:to]
|
20
|
+
image.to_blob
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -10,7 +10,13 @@ module Scruffy::Rasterizers
|
|
10
10
|
def rasterize(svg, options={})
|
11
11
|
# I know this seems weird, I'm open to suggestions.
|
12
12
|
# I didn't want RMagick required unless absolutely necessary.
|
13
|
-
|
13
|
+
unless defined? Magick
|
14
|
+
begin
|
15
|
+
require 'rmagick'
|
16
|
+
rescue LoadError
|
17
|
+
require 'RMagick'
|
18
|
+
end
|
19
|
+
end
|
14
20
|
|
15
21
|
image = Magick::Image::from_blob(svg)[0]
|
16
22
|
|
@@ -24,4 +30,4 @@ module Scruffy::Rasterizers
|
|
24
30
|
image.to_blob { self.format = options[:as] }
|
25
31
|
end
|
26
32
|
end
|
27
|
-
end
|
33
|
+
end
|
data/lib/scruffy/renderers.rb
CHANGED
@@ -13,8 +13,10 @@
|
|
13
13
|
module Scruffy::Renderers; end
|
14
14
|
|
15
15
|
require 'scruffy/renderers/base'
|
16
|
+
require 'scruffy/renderers/basic'
|
16
17
|
require 'scruffy/renderers/empty'
|
17
18
|
require 'scruffy/renderers/standard'
|
19
|
+
require 'scruffy/renderers/axis_legend'
|
18
20
|
require 'scruffy/renderers/reversed'
|
19
21
|
require 'scruffy/renderers/cubed'
|
20
22
|
require 'scruffy/renderers/split'
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Scruffy::Renderers
|
2
|
+
class AxisLegend < Empty
|
3
|
+
|
4
|
+
def define_layout
|
5
|
+
super do |components|
|
6
|
+
components << Scruffy::Components::Title.new(:title, :position => [5, 2], :size => [90, 7])
|
7
|
+
|
8
|
+
|
9
|
+
components << Scruffy::Components::Viewport.new(:view, :position => [6, 22], :size => [90, 66]) do |graph|
|
10
|
+
graph << Scruffy::Components::ValueMarkers.new(:values, :position => [0, 2], :size => [8, 89])
|
11
|
+
graph << Scruffy::Components::Grid.new(:grid, :position => [10, 0], :size => [90, 89], :stroke_width => 1)
|
12
|
+
graph << Scruffy::Components::VGrid.new(:vgrid, :position => [10, 0], :size => [90, 89], :stroke_width => 1)
|
13
|
+
graph << Scruffy::Components::DataMarkers.new(:labels, :position => [10, 92], :size => [90, 8])
|
14
|
+
graph << Scruffy::Components::Graphs.new(:graphs, :position => [10, 0], :size => [90, 89])
|
15
|
+
end
|
16
|
+
components << Scruffy::Components::YLegend.new(:y_legend, :position => [1, 26], :size => [5, 66])
|
17
|
+
components << Scruffy::Components::XLegend.new(:x_legend, :position => [5, 92], :size => [90, 6])
|
18
|
+
components << Scruffy::Components::Legend.new(:legend, :position => [5, 13], :size => [90, 6])
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
def hide_values
|
24
|
+
super
|
25
|
+
component(:view).position[0] = -10
|
26
|
+
component(:view).size[0] = 100
|
27
|
+
end
|
28
|
+
|
29
|
+
def labels
|
30
|
+
[component(:view).component(:labels)]
|
31
|
+
end
|
32
|
+
|
33
|
+
def values
|
34
|
+
[component(:view).component(:values)]
|
35
|
+
end
|
36
|
+
|
37
|
+
def grids
|
38
|
+
[component(:view).component(:grid),component(:view).component(:vgrid)]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -30,9 +30,11 @@ module Scruffy::Renderers
|
|
30
30
|
rendertime_renderer.instance_eval { before_render if respond_to?(:before_render) }
|
31
31
|
|
32
32
|
svg = Builder::XmlMarkup.new(:indent => 2)
|
33
|
-
|
34
|
-
|
35
|
-
|
33
|
+
unless options[:no_doctype_header]
|
34
|
+
svg.instruct!
|
35
|
+
svg.declare! :DOCTYPE, :svg, :PUBLIC, "-//W3C//DTD SVG 1.0//EN", "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"
|
36
|
+
end
|
37
|
+
svg.svg(:xmlns => "http://www.w3.org/2000/svg", 'xmlns:xlink' => "http://www.w3.org/1999/xlink", :width => options[:size].first, :height => options[:size].last) {
|
36
38
|
svg.g(:id => options[:graph_id]) {
|
37
39
|
rendertime_renderer.components.each do |component|
|
38
40
|
component.render(svg,
|
@@ -90,4 +92,4 @@ module Scruffy::Renderers
|
|
90
92
|
end
|
91
93
|
end
|
92
94
|
end # base
|
93
|
-
end
|
95
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Scruffy::Renderers
|
2
|
+
# ===Scruffy::Renderers::Basic
|
3
|
+
#
|
4
|
+
# Author:: Martyn Taylor
|
5
|
+
# Date:: July 30th 2010
|
6
|
+
#
|
7
|
+
# The Basic Renderer Creates a Blank Graph with everything ready for adding components
|
8
|
+
class Basic < Base
|
9
|
+
|
10
|
+
def define_layout
|
11
|
+
components << Scruffy::Components::Background.new(:background, :position => [0,0], :size =>[100, 100])
|
12
|
+
components << Scruffy::Components::Viewport.new(:view, :position => [2, 26], :size => [89, 66]) do |graph|
|
13
|
+
graph << Scruffy::Components::Graphs.new(:graphs, :position => [3, 0], :size => [80, 89])
|
14
|
+
graph << Scruffy::Components::ValueMarkers.new(:values, :position => [0, 0], :size => [1, 89])
|
15
|
+
graph << Scruffy::Components::Axis.new(:values, :position => [3, 0], :size => [80, 89])
|
16
|
+
end
|
17
|
+
yield(self.components) if block_given?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -4,11 +4,12 @@ module Scruffy::Renderers
|
|
4
4
|
def define_layout
|
5
5
|
super do |components|
|
6
6
|
components << Scruffy::Components::Title.new(:title, :position => [5, 2], :size => [90, 7])
|
7
|
-
components << Scruffy::Components::Viewport.new(:view, :position => [2, 26], :size => [
|
8
|
-
graph << Scruffy::Components::ValueMarkers.new(:values, :position => [0, 2], :size => [
|
9
|
-
graph << Scruffy::Components::Grid.new(:grid, :position => [
|
10
|
-
graph << Scruffy::Components::
|
11
|
-
graph << Scruffy::Components::
|
7
|
+
components << Scruffy::Components::Viewport.new(:view, :position => [2, 26], :size => [90, 66]) do |graph|
|
8
|
+
graph << Scruffy::Components::ValueMarkers.new(:values, :position => [0, 2], :size => [8, 89])
|
9
|
+
graph << Scruffy::Components::Grid.new(:grid, :position => [10, 0], :size => [90, 89], :stroke_width => 1)
|
10
|
+
graph << Scruffy::Components::VGrid.new(:vgrid, :position => [10, 0], :size => [90, 89], :stroke_width => 1)
|
11
|
+
graph << Scruffy::Components::DataMarkers.new(:labels, :position => [10, 92], :size => [90, 8])
|
12
|
+
graph << Scruffy::Components::Graphs.new(:graphs, :position => [10, 0], :size => [90, 89])
|
12
13
|
end
|
13
14
|
components << Scruffy::Components::Legend.new(:legend, :position => [5, 13], :size => [90, 6])
|
14
15
|
end
|
@@ -30,7 +31,7 @@ module Scruffy::Renderers
|
|
30
31
|
end
|
31
32
|
|
32
33
|
def grids
|
33
|
-
[component(:view).component(:grid)]
|
34
|
+
[component(:view).component(:grid),component(:view).component(:vgrid)]
|
34
35
|
end
|
35
36
|
end
|
36
37
|
end
|
data/lib/scruffy/themes.rb
CHANGED
@@ -19,8 +19,13 @@ module Scruffy::Themes
|
|
19
19
|
class Base
|
20
20
|
attr_accessor :background # Background color or array of two colors
|
21
21
|
attr_accessor :colors # Array of colors for data graphs
|
22
|
+
attr_accessor :outlines # Array of colors for outlines of elements for data graphs
|
23
|
+
attr_accessor :grid # Marker color for grid lines, etc.
|
22
24
|
attr_accessor :marker # Marker color for grid lines, values, etc.
|
23
25
|
attr_accessor :font_family # Font family: Not really supported. Maybe in the future.
|
26
|
+
attr_accessor :marker_font_size # Marker Font Size:
|
27
|
+
attr_accessor :title_font_size # Title Font Size:
|
28
|
+
attr_accessor :legend_font_size # Legend Font Size:
|
24
29
|
|
25
30
|
# Returns a new Scruffy::Themes::Base object.
|
26
31
|
#
|
@@ -34,17 +39,33 @@ module Scruffy::Themes
|
|
34
39
|
def initialize(descriptor)
|
35
40
|
self.background = descriptor[:background]
|
36
41
|
self.colors = descriptor[:colors]
|
42
|
+
self.outlines = descriptor[:outlines]
|
43
|
+
self.grid = descriptor[:grid]
|
37
44
|
self.marker = descriptor[:marker]
|
38
45
|
self.font_family = descriptor[:font_family]
|
46
|
+
self.marker_font_size = descriptor[:marker_font_size]
|
47
|
+
self.title_font_size = descriptor[:title_font_size]
|
48
|
+
self.legend_font_size = descriptor[:legend_font_size]
|
39
49
|
end
|
40
50
|
|
41
51
|
# Returns the next available color in the color array.
|
42
52
|
def next_color
|
43
|
-
@previous_color
|
53
|
+
@previous_color = 0 if @previous_color.nil?
|
44
54
|
@previous_color += 1
|
45
55
|
|
46
56
|
self.colors[(@previous_color-1) % self.colors.size]
|
47
57
|
end
|
58
|
+
|
59
|
+
|
60
|
+
# Returns the next available outline in the outline array.
|
61
|
+
def next_outline
|
62
|
+
@previous_outline = 0 if @previous_outline.nil?
|
63
|
+
@previous_outline += 1
|
64
|
+
if self.outlines.nil?
|
65
|
+
return "#000000"
|
66
|
+
end
|
67
|
+
self.outlines[(@previous_outline-1) % self.outlines.size]
|
68
|
+
end
|
48
69
|
|
49
70
|
# todo: Implement darken function.
|
50
71
|
def darken(color, shift=20); end
|
@@ -54,6 +75,21 @@ module Scruffy::Themes
|
|
54
75
|
|
55
76
|
end
|
56
77
|
|
78
|
+
|
79
|
+
|
80
|
+
# A basic default theme
|
81
|
+
# Based on http://www.wellstyled.com/tools/colorscheme2/index-en.html?tetrad;50;0;255;1;-1;1;-0.6;0.1;1;0.6;1;1;-1;1;-0.6;0.1;1;0.6;1;1;-1;1;-0.6;0.1;1;0.6;1;1;-1;1;-0.6;0.1;1;0.6;1;0
|
82
|
+
class Standard < Base
|
83
|
+
def initialize
|
84
|
+
super({
|
85
|
+
:background => ['#FFFFFF', '#FFFFFF'],
|
86
|
+
:marker => '#999999',
|
87
|
+
:colors => %w(#1919B3 #FFB200 #FFFF00 #660099 #E9E9FF #FFF7E6 #FFFFE6 #F7E6FF #0F0F6B #996B00 #999900 #3D005C)
|
88
|
+
})
|
89
|
+
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
57
93
|
# Keynote theme, based on Apple's Keynote presentation software.
|
58
94
|
#
|
59
95
|
# Color values used from Gruff's default theme.
|
data/lib/scruffy/version.rb
CHANGED
@@ -0,0 +1,55 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" type>
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="600" height="360">
|
4
|
+
<g id="scruffy_graph">
|
5
|
+
<g id="background" transform="translate(0.0, 0.0)">
|
6
|
+
<defs>
|
7
|
+
<linearGradient id="BackgroundGradient" x1="0%" y1="0%" x2="0%" y2="100%">
|
8
|
+
<stop offset="5%" stop-color="#FFFFFF"/>
|
9
|
+
<stop offset="95%" stop-color="#FFFFFF"/>
|
10
|
+
</linearGradient>
|
11
|
+
</defs>
|
12
|
+
<rect width="600.0" height="360.0" x="0" y="0" fill="url(#BackgroundGradient) #FFFFFF"/>
|
13
|
+
</g>
|
14
|
+
<g id="title" transform="translate(30.0, 7.2)">
|
15
|
+
<text class="title" x="270.0" y="25.200000000000003" font-size="25.200000000000003" font-family="" fill="#999999" stroke="none" stroke-width="0" text-anchor="middle">Graph</text>
|
16
|
+
</g>
|
17
|
+
<g id="view" transform="translate(12.0, 93.60000000000001)">
|
18
|
+
<g>
|
19
|
+
<g id="values" transform="translate(0.0, 4.752000000000001)">
|
20
|
+
<text x="43.2" y="211.46400000000003" font-size="16.917120000000004" font-family="" fill="#999999" text-anchor="end">0</text>
|
21
|
+
<text x="43.2" y="158.598" font-size="16.917120000000004" font-family="" fill="#999999" text-anchor="end">1</text>
|
22
|
+
<text x="43.2" y="105.73200000000001" font-size="16.917120000000004" font-family="" fill="#999999" text-anchor="end">2</text>
|
23
|
+
<text x="43.2" y="52.866000000000014" font-size="16.917120000000004" font-family="" fill="#999999" text-anchor="end">3</text>
|
24
|
+
<text x="43.2" y="0.0" font-size="16.917120000000004" font-family="" fill="#999999" text-anchor="end">4</text>
|
25
|
+
</g>
|
26
|
+
<g id="grid" transform="translate(54.0, 0.0)">
|
27
|
+
<line x1="0" y1="0.0" x2="486.0" y2="0.0" style="stroke: #999999; stroke-width: 1;"/>
|
28
|
+
<line x1="0" y1="52.86600000000001" x2="486.0" y2="52.86600000000001" style="stroke: #999999; stroke-width: 1;"/>
|
29
|
+
<line x1="0" y1="105.73200000000001" x2="486.0" y2="105.73200000000001" style="stroke: #999999; stroke-width: 1;"/>
|
30
|
+
<line x1="0" y1="158.598" x2="486.0" y2="158.598" style="stroke: #999999; stroke-width: 1;"/>
|
31
|
+
<line x1="0" y1="211.46400000000003" x2="486.0" y2="211.46400000000003" style="stroke: #999999; stroke-width: 1;"/>
|
32
|
+
<line x1="0" y1="211.46400000000003" x2="486.0" y2="211.46400000000003" style="stroke: #999999; stroke-width: 1;"/>
|
33
|
+
</g>
|
34
|
+
<g id="vgrid" transform="translate(54.0, 0.0)">
|
35
|
+
<line x1="0.0" y1="0" x2="0.0" y2="211.46400000000003" style="stroke: #999999; stroke-width: 1;"/>
|
36
|
+
<line x1="121.5" y1="0" x2="121.5" y2="211.46400000000003" style="stroke: #999999; stroke-width: 1;"/>
|
37
|
+
<line x1="243.0" y1="0" x2="243.0" y2="211.46400000000003" style="stroke: #999999; stroke-width: 1;"/>
|
38
|
+
<line x1="364.5" y1="0" x2="364.5" y2="211.46400000000003" style="stroke: #999999; stroke-width: 1;"/>
|
39
|
+
<line x1="486.0" y1="0" x2="486.0" y2="211.46400000000003" style="stroke: #999999; stroke-width: 1;"/>
|
40
|
+
</g>
|
41
|
+
<g id="labels" transform="translate(54.0, 218.59200000000004)">
|
42
|
+
</g>
|
43
|
+
<g id="graphs" transform="translate(54.0, 0.0)">
|
44
|
+
<g id="component_graphs_graph_0" class="graph_layer">
|
45
|
+
<polyline points="60.75,158.598 182.25,105.73200000000001 425.25,0.0" fill="none" stroke="#1919B3" stroke-width="1" style=""/>
|
46
|
+
</g>
|
47
|
+
</g>
|
48
|
+
</g>
|
49
|
+
</g>
|
50
|
+
<g id="legend" transform="translate(30.0, 46.800000000000004)">
|
51
|
+
<rect x="243.0" y="0" width="10.799999999999999" height="10.799999999999999" fill="#1919B3"/>
|
52
|
+
<text x="262.44" y="11.663999999999998" font-size="15.551999999999998" font-family="" style="color: #999999" fill="#999999">Data</text>
|
53
|
+
</g>
|
54
|
+
</g>
|
55
|
+
</svg>
|
@@ -0,0 +1,55 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" type>
|
3
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="600" height="360">
|
4
|
+
<g id="scruffy_graph">
|
5
|
+
<g id="background" transform="translate(0.0, 0.0)">
|
6
|
+
<defs>
|
7
|
+
<linearGradient id="BackgroundGradient" x1="0%" y1="0%" x2="0%" y2="100%">
|
8
|
+
<stop offset="5%" stop-color="#FFFFFF"/>
|
9
|
+
<stop offset="95%" stop-color="#FFFFFF"/>
|
10
|
+
</linearGradient>
|
11
|
+
</defs>
|
12
|
+
<rect width="600.0" height="360.0" x="0" y="0" fill="url(#BackgroundGradient) #FFFFFF"/>
|
13
|
+
</g>
|
14
|
+
<g id="title" transform="translate(30.0, 7.2)">
|
15
|
+
<text class="title" x="270.0" y="25.200000000000003" font-size="25.200000000000003" font-family="" fill="#999999" stroke="none" stroke-width="0" text-anchor="middle">Graph</text>
|
16
|
+
</g>
|
17
|
+
<g id="view" transform="translate(12.0, 93.60000000000001)">
|
18
|
+
<g>
|
19
|
+
<g id="values" transform="translate(0.0, 4.752000000000001)">
|
20
|
+
<text x="43.2" y="211.46400000000003" font-size="16.917120000000004" font-family="" fill="#999999" text-anchor="end">0</text>
|
21
|
+
<text x="43.2" y="158.598" font-size="16.917120000000004" font-family="" fill="#999999" text-anchor="end">1</text>
|
22
|
+
<text x="43.2" y="105.73200000000001" font-size="16.917120000000004" font-family="" fill="#999999" text-anchor="end">2</text>
|
23
|
+
<text x="43.2" y="52.866000000000014" font-size="16.917120000000004" font-family="" fill="#999999" text-anchor="end">3</text>
|
24
|
+
<text x="43.2" y="0.0" font-size="16.917120000000004" font-family="" fill="#999999" text-anchor="end">4</text>
|
25
|
+
</g>
|
26
|
+
<g id="grid" transform="translate(54.0, 0.0)">
|
27
|
+
<line x1="0" y1="0.0" x2="486.0" y2="0.0" style="stroke: #999999; stroke-width: 1;"/>
|
28
|
+
<line x1="0" y1="52.86600000000001" x2="486.0" y2="52.86600000000001" style="stroke: #999999; stroke-width: 1;"/>
|
29
|
+
<line x1="0" y1="105.73200000000001" x2="486.0" y2="105.73200000000001" style="stroke: #999999; stroke-width: 1;"/>
|
30
|
+
<line x1="0" y1="158.598" x2="486.0" y2="158.598" style="stroke: #999999; stroke-width: 1;"/>
|
31
|
+
<line x1="0" y1="211.46400000000003" x2="486.0" y2="211.46400000000003" style="stroke: #999999; stroke-width: 1;"/>
|
32
|
+
<line x1="0" y1="211.46400000000003" x2="486.0" y2="211.46400000000003" style="stroke: #999999; stroke-width: 1;"/>
|
33
|
+
</g>
|
34
|
+
<g id="vgrid" transform="translate(54.0, 0.0)">
|
35
|
+
<line x1="0.0" y1="0" x2="0.0" y2="211.46400000000003" style="stroke: #999999; stroke-width: 1;"/>
|
36
|
+
<line x1="121.5" y1="0" x2="121.5" y2="211.46400000000003" style="stroke: #999999; stroke-width: 1;"/>
|
37
|
+
<line x1="243.0" y1="0" x2="243.0" y2="211.46400000000003" style="stroke: #999999; stroke-width: 1;"/>
|
38
|
+
<line x1="364.5" y1="0" x2="364.5" y2="211.46400000000003" style="stroke: #999999; stroke-width: 1;"/>
|
39
|
+
<line x1="486.0" y1="0" x2="486.0" y2="211.46400000000003" style="stroke: #999999; stroke-width: 1;"/>
|
40
|
+
</g>
|
41
|
+
<g id="labels" transform="translate(54.0, 218.59200000000004)">
|
42
|
+
</g>
|
43
|
+
<g id="graphs" transform="translate(54.0, 0.0)">
|
44
|
+
<g id="component_graphs_graph_0" class="graph_layer">
|
45
|
+
<polyline points="60.75,158.598 182.25,105.73200000000001 425.25,0.0" fill="none" stroke="#1919B3" stroke-width="1" style=""/>
|
46
|
+
</g>
|
47
|
+
</g>
|
48
|
+
</g>
|
49
|
+
</g>
|
50
|
+
<g id="legend" transform="translate(30.0, 46.800000000000004)">
|
51
|
+
<rect x="243.0" y="0" width="10.799999999999999" height="10.799999999999999" fill="#1919B3"/>
|
52
|
+
<text x="262.44" y="11.663999999999998" font-size="15.551999999999998" font-family="" style="color: #999999" fill="#999999">Data</text>
|
53
|
+
</g>
|
54
|
+
</g>
|
55
|
+
</svg>
|