Don’t Worry.Be Scruffy.
本文共 3666 字,大约阅读时间需要 12 分钟。
Scruffy是什么?
Scruffy是一个用来生成图表的ruby库,它的功能非常强大,可以用它来做web开发,在页面上输出多媒体数据。
- 基于 SVG Scruffy 基于 SVG 技术来生成图表 . 这也使得Scruffy具备SVG的许多优点,譬如文件的大小与图形的复杂程度有关,而与图形的具体尺寸无关。
- Mix-n-Match Graphs 对于Scruffy生成的图表不局限于单一的图表类型(线,柱状,区域等)。你可以对每一个数据集指定一个不同的类型
- 快照呈递 你可以任意的多次输出同一个Scruffy图表,或者是修改每一次输出图表的设置(数据、颜色,甚至图表的尺寸和图标类型)。
- 可扩展性 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 = "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 = "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' 本文转自 fsjoy1983 51CTO博客,原文链接:http://blog.51cto.com/fsjoy/168842,如需转载请自行联系原作者