scruffy 0.2.6 → 0.3.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- 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>
|