Scruffy是什么?
Scruffy是一个用来生成图表的ruby库,它的功能非常强大,可以用它来做web开发,在页面上输出多媒体数据。
Scruffy的主要特性包括:
- 基于 SVG
Scruffy 基于 SVG 技术来生成图表 . 这也使得Scruffy具备SVG的许多优点,譬如文件的大小与图形的复杂程度有关,而与图形的具体尺寸无关。 - Mix-n-Match Graphs
对于Scruffy生成的图表不局限于单一的图表类型(线,柱状,区域等)。你可以对每一个数据集指定一个不同的类型 - 快照呈递
你可以任意的多次输出同一个Scruffy图表,或者是修改每一次输出图表的设置(数据、颜色,甚至图表的尺寸和图标类型)。 - 可扩展性
Scruffy具有很强的可扩展性。可以通过仅仅几行代码来添加新的图表类型或者主题。 如果你需要更多的图像控制功能,也可以自定义输出,生成数据等等内容。
安装
sudo gem install scruffy
实例:
饼图
graph = Scruffy::Graph.new
graph.title = "Favourite Snacks"
graph.renderer = Scruffy::Renderers::Pie.new
graph.add :pie, '', {
'Apple' => 20,
'Banana' => 100,
'Orange' => 70,
'Taco' => 30
}
graph.render :to => "pie_test.svg"
graph.render :width => 300, :height => 200,
:to => "pie_test.png", :as => 'png'
graph = Scruffy::Graph.new
graph.title = "Favourite Snacks"
graph.renderer = Scruffy::Renderers::Pie.new
graph.add :pie, '', {
'Apple' => 20,
'Banana' => 100,
'Orange' => 70,
'Taco' => 30
}
graph.render :to => "pie_test.svg"
graph.render :width => 300, :height => 200,
:to => "pie_test.png", :as => 'png'
直线图:
graph = Scruffy::Graph.new
graph.title = "Sample Line Graph"
graph.renderer = Scruffy::Renderers::Standard.new
graph.add :line, 'Example', [20, 100, 70, 30, 106]
graph.render :to => "line_test.svg"
graph.render :width => 300, :height => 200,
:to => "line_test.png", :as => 'png'
graph = Scruffy::Graph.new
graph.title = "Sample Line Graph"
graph.renderer = Scruffy::Renderers::Standard.new
graph.add :line, 'Example', [20, 100, 70, 30, 106]
graph.render :to => "line_test.svg"
graph.render :width => 300, :height => 200,
:to => "line_test.png", :as => 'png'
柱状图
graph = Scruffy::Graph.new
graph.title = "Sample Line Graph"
graph.renderer = Scruffy::Renderers::Standard.new
graph.add :line, 'Example', [20, 100, 70, 30, 106]
graph.render :to => "line_test.svg"
graph.render :width => 300, :height => 200,
:to => "line_test.png", :as => 'png'
graph = Scruffy::Graph.new
graph.title = "Sample Line Graph"
graph.renderer = Scruffy::Renderers::Standard.new
graph.add :line, 'Example', [20, 100, 70, 30, 106]
graph.render :to => "line_test.svg"
graph.render :width => 300, :height => 200,
:to => "line_test.png", :as => 'png'
分离图
graph = Scruffy::Graph.new
graph.title = "Long-term Comparisons"
graph.value_formatter = Scruffy::Formatters::Currency.new(
:special_negatives => true, :negative_color => '#ff7777')
graph.renderer = Scruffy::Renderers::Split.new(
:split_label => 'Northeastern (Top) / Central (Bottom)')
graph.add :area, 'Jeff',
[20, -5, 100, 70, 30, 106, 203, 100, 50, 203, 289, 20],
:category => :top
graph.add :area, 'Jerry',
[-10, 70, 20, 102, 201, 26, 30, 106, 203, 100, 50, 39],
:category => :top
graph.add :bar, 'Jack',
[30, 0, 49, 29, 100, 203, 70, 20, 102, 201, 26, 130],
:category => :bottom
graph.add :line, 'Brasten',
[42, 10, 75, 150, 130, 70, -10, -20, 50, 92, -21, 19],
:categories => [:top, :bottom]
graph.add :line, 'Jim',
[-10, -20, 50, 92, -21, 56, 92, 84, 82, 100, 39, 120],
:categories => [:top, :bottom]
graph.point_markers = ['Jan', 'Feb', 'Mar', 'Apr', 'May',
'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
graph.render :to => "split_test.svg"
graph.render :width => 500,
:to => "split_test.png", :as => 'png'
graph = Scruffy::Graph.new
graph.title = "Long-term Comparisons"
graph.value_formatter = Scruffy::Formatters::Currency.new(
:special_negatives => true, :negative_color => '#ff7777')
graph.renderer = Scruffy::Renderers::Split.new(
:split_label => 'Northeastern (Top) / Central (Bottom)')
graph.add :area, 'Jeff',
[20, -5, 100, 70, 30, 106, 203, 100, 50, 203, 289, 20],
:category => :top
graph.add :area, 'Jerry',
[-10, 70, 20, 102, 201, 26, 30, 106, 203, 100, 50, 39],
:category => :top
graph.add :bar, 'Jack',
[30, 0, 49, 29, 100, 203, 70, 20, 102, 201, 26, 130],
:category => :bottom
graph.add :line, 'Brasten',
[42, 10, 75, 150, 130, 70, -10, -20, 50, 92, -21, 19],
:categories => [:top, :bottom]
graph.add :line, 'Jim',
[-10, -20, 50, 92, -21, 56, 92, 84, 82, 100, 39, 120],
:categories => [:top, :bottom]
graph.point_markers = ['Jan', 'Feb', 'Mar', 'Apr', 'May',
'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
graph.render :to => "split_test.svg"
graph.render :width => 500,
:to => "split_test.png", :as => 'png'
堆叠图
graph = Scruffy::Graph.new
graph.title = "Comparative Agent Performance"
graph.value_formatter = Scruffy::Formatters::Percentage.new(:precision => 0)
graph.add :stacked do |stacked|
stacked.add :bar, 'Jack', [30, 60, 49, 29, 100, 120]
stacked.add :bar, 'Jill', [120, 240, 0, 100, 140, 20]
stacked.add :bar, 'Hill', [10, 10, 90, 20, 40, 10]
end
graph.point_markers = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
graph.render :to => "stacking_test.svg"
graph.render :width => 500, :to => "stacking_test.png", :as => 'png'
graph = Scruffy::Graph.new
graph.title = "Comparative Agent Performance"
graph.value_formatter = Scruffy::Formatters::Percentage.new(:precision => 0)
graph.add :stacked do |stacked|
stacked.add :bar, 'Jack', [30, 60, 49, 29, 100, 120]
stacked.add :bar, 'Jill', [120, 240, 0, 100, 140, 20]
stacked.add :bar, 'Hill', [10, 10, 90, 20, 40, 10]
end
graph.point_markers = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
graph.render :to => "stacking_test.svg"
graph.render :width => 500, :to => "stacking_test.png", :as => 'png'
graph.title = "Comparative Agent Performance"
graph.value_formatter = Scruffy::Formatters::Percentage.new(:precision => 0)
graph.add :stacked do |stacked|
stacked.add :bar, 'Jack', [30, 60, 49, 29, 100, 120]
stacked.add :bar, 'Jill', [120, 240, 0, 100, 140, 20]
stacked.add :bar, 'Hill', [10, 10, 90, 20, 40, 10]
end
graph.point_markers = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
graph.render :to => "stacking_test.svg"
graph.render :width => 500, :to => "stacking_test.png", :as => 'png'
层叠
graph = Scruffy::Graph.new
graph.title = "Some Kind of Information"
graph.renderer = Scruffy::Renderers::Cubed.new
graph.add :area, 'Jeff', [20, -5, 100, 70, 30, 106],
:categories => [:top_left, :bottom_right]
graph.add :area, 'Jerry', [-10, 70, 20, 102, 201, 26],
:categories => [:bottom_left, :buttom_right]
graph.add :bar, 'Jack', [30, 0, 49, 29, 100, 203],
:categories => [:bottom_left, :top_right]
graph.add :line, 'Brasten', [42, 10, 75, 150, 130, 70],
:categories => [:top_right, :bottom_left]
graph.add :line, 'Jim', [-10, -20, 50, 92, -21, 56],
:categories => [:top_left, :bottom_right]
graph.point_markers = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
graph.render :to => "multi_test.svg"
graph.render :width => 500, :to => "multi_test.png", :as => 'png'
graph = Scruffy::Graph.new
graph.title = "Some Kind of Information"
graph.renderer = Scruffy::Renderers::Cubed.new
graph.add :area, 'Jeff', [20, -5, 100, 70, 30, 106],
:categories => [:top_left, :bottom_right]
graph.add :area, 'Jerry', [-10, 70, 20, 102, 201, 26],
:categories => [:bottom_left, :buttom_right]
graph.add :bar, 'Jack', [30, 0, 49, 29, 100, 203],
:categories => [:bottom_left, :top_right]
graph.add :line, 'Brasten', [42, 10, 75, 150, 130, 70],
:categories => [:top_right, :bottom_left]
graph.add :line, 'Jim', [-10, -20, 50, 92, -21, 56],
:categories => [:top_left, :bottom_right]
graph.point_markers = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
graph.render :to => "multi_test.svg"
graph.render :width => 500, :to => "multi_test.png", :as => 'png'
本文转自 fsjoy1983 51CTO博客,原文链接:http://blog.51cto.com/fsjoy/168842,如需转载请自行联系原作者