`

使用rails制作图表

    博客分类:
  • RoR
阅读更多

原文出处:http://www.railsontherun.com/2007/10/4/sexy-charts-in-less-than-5-minutes

我们的目标是使用rails制作和显示类似于下面图表:

在rails中同样可以使用gurff或者jfreeChart,但是Gruff需要Rmagick来生成静态图片,假如你的图片是经常变化的,那么这个过程会非常痛苦,JFreeChart需要java,所以,我看我们还是寻找其他方法来解决这个问题吧。

什么方法?当然是flash。

我们使用xml/swf库来提供我们需要的功能,当然我们不需要懂得action script,因为已经有人为我们做好了插件-amCharts.

注意,amCharts不是开源的,甚至是需要收费的,价格大概是85欧一个站点(我靠,其实很贵啊)。当然,也有免费的版本,只不过所有图片的链接都会指向amcharts.com。

下载安装包:http://www.amcharts.com/column/download/

解压到public目录下,查看解压后的目录中是否包含.swf,xml文件和fonts目录。

使用:当在程序中被load之后,amCharts等待一个数据流,并将数据流解析和显示成为一个chart。可以静态或者动态的改变xml文件来配置amCharts的工作方式。

需要说明的是,amCharts接受的数据流实际上是一个xml文件,xml文件可以从action中得到

ruby 代码
  1. def population   
  2.   @cities = City.find(:all)   
  3.   @population_data_link = formatted_population_reports_url(:xml)   
  4.   respond_to do |format|   
  5.     format.html   
  6.     format.xml  { render :action => "population.xml.builder":layout => false }   
  7.   end  
  8. end  

正如我们看到的,数据流中包含两个数据:cities和population_data_link。populuation_data_link如何得到的?简单,一个路由而已。

ruby 代码
  1. map.resources :reports:collection => {:population => :get}  

为了确保客户端安装flash,我们需要在视图中加入以下语句

ruby 代码
  1. <%= javascript_include_tag 'swfobject' %>  

现在我们要建立两个视图模板:population.html.erb和population.xml.builder

分别来看两个视图模板的内容。

population.html.erb

js 代码
  1. <div id="population_chart" class='chart'>   
  2.   <strong>Text displayed when the user doesn't have Flash. You might want to display a simple table with the population, search engines and visitor without flash would love that.</strong>   
  3.   <p> To see this page properly, you need to upgrade your Flash Player, please visit the Adobe web site</p>   
  4. </div>   
  5.   
  6. <script type="text/javascript">   
  7.   // <![CDATA[       
  8.   var so = new SWFObject("/amcolumn/amcolumn.swf""population_chart""800""380""8""#000000");   
  9.   so.addVariable("path""/amcolumn/");   
  10.   so.addVariable("settings_file", escape("/amcolumn/column_settings.xml"));   
  11.   so.addVariable("data_file", escape("<%= @population_data_link %>"));   
  12.   so.addVariable("additional_chart_settings""<settings><labels><label><x>250</x><y>25</y><text_size>18</text_size><text><![CDATA[<b>California Population as of <%= Time.now.to_s(:db) %></b>]]></text></label></labels></settings>");   
  13.   so.addVariable("preloader_color""#000000");   
  14.   so.write("population_chart");   
  15.   // ]]>   
  16. </script>  

可以看到,基本上都是一些简单的js片段。

因为我将amChart column lib解压到public/amcolumn目录下,所以我设置path为"/amcolumn/"

同样,配置文件为"/amcolumn/column_setting.xml",最重要的是要显示的数据data_file,我们需要显示@population_data_links,最后是一些额外的设置。

ok,这就是erb文件,下面看看xml.builder

xml 代码
  1. xml.instruct! :xml, :version=>"1.0", :encoding=>"UTF-8"   
  2. xml.chart do   
  3.   # xml.message "You can broadcast any message to chart from data XML file", :bg_color => "#FFFFFF", :text_color => "#000000"   
  4.   xml.series do       
  5.     @cities.each_with_index do |city, index|   
  6.       xml.value city.name, :xid => index   
  7.     end   
  8.   end   
  9.   
  10.   xml.graphs do   
  11.    #the gid is used in the settings file to set different settings just for this graph   
  12.     xml.graph :gid => 'population' do   
  13.       @cities.each_with_index do |city, index|   
  14.         population = city.population   
  15.         case population   
  16.           # When the population is > 1 million, show the bar in red/pink   
  17.           when > 100000   
  18.             xml.value value, :xid => index, :color => "#ff43a8", :gradient_fill_colors => "#960040,#ff43a8", :description => level   
  19.           else   
  20.             xml.value value, :xid => index, :color => "#00C3C6", :gradient_fill_colors => "#009c9d,#00C3C6", :description => level   
  21.           end   
  22.       end   
  23.     end   
  24.   end   
  25.   
  26. end  
分享到:
评论

相关推荐

    图表:for在Rails 5.x中用一行Ruby添加漂亮且可重复使用的图表

    我正在阅读Rails引擎,并决定通过制作宝石来测试我的新知识。 由于我之前的项目涉及制作多个图表,因此我了解仅针对不同的图表在javascript和ruby中具有重复的数据结构和功能的痛苦。 图表是我的解决方案,用于将...

    FusionCharts 通用图表工具

    它与XML和JSON数据一起工作,并可以集成您使用的任何服务器端的技术(ASP,ASP.NET,PHP,JSP,ColdFusion,Ruby Rails等)和数据库。FusionCharts XT能满足您所有的制图要求。 FusionCharts XT是值得信赖的图表...

    FusionChartsfree使用手册

    总的来说,FusionCharts Free是一个强大的工具,它将复杂的图表制作过程简化,让开发者无需深入了解Flash编程就能轻松创建专业级别的交互式图表。这使得它成为网站和应用程序中数据呈现的理想选择,尤其适合需要动态...

    rails_d3_seed:Rails 应用程序中 d3 可视化的种子

    3. **数据处理**:Rails应用通常使用ActiveRecord与数据库进行交互。你可以在控制器中查询数据,然后将其传递给视图。D3可以接收这些数据并根据其内容创建或更新可视化。 4. **响应式设计**:为了确保在不同设备上...

    FusionCharts

     FusionCharts是一个闪光的图表组件,它可以用来制作数据动画图表,其中动画效果用的是Adobe Flash 8 (原Macromedia Flash的)制作的flash , FusionCharts可用于任何网页的脚本语言类似于HTML , .NET,ASP , ...

    Fusioncharts_XT_V3.2.2最新版教程下载

    Fusioncharts XT V3.2.2版教程是一个针对最新Fusioncharts产品的详细指南,它不仅提供了安装和使用的基础知识,还包括了如何利用各种功能来增强数据可视化效果,帮助开发者和设计师制作出既美观又实用的图表。...

    java制作报表整合

    例如,可以使用`ChartPanel`组件将多个图表添加到一个Swing界面中,或者使用`CategoryPlot`的多视图功能在一个图表中显示多种类型的数据。 通过上述方法,可以在Java应用程序中创建和整合多种类型的图表,形成丰富...

    Fusioncharts XT V3.2.2最新中文版教程

    Fusioncharts V3.2.2 是一款先进的图表制作工具,专为现代网站和企业应用程序设计,旨在帮助用户创建交互性强、视觉效果出众的图表。该版本是业界领先的企业级图表组件之一,能够实现在PC、Mac、iPad、iPhone以及...

    effective_datatables:对于Ruby on Rails,有效的ActiveRecord到Datatables dsl。 快速制作智能表

    使用高级DSL和一个ruby文件为任何ActiveRecord类或Array创建一个。 强大的服务器端搜索,排序和筛选ActiveRecord类(具有belongs_to和has_many关系)。 通过搜索sql列以及ActiveRecord和Array集合中的计算值来做...

    报表实用指南

    本书详细介绍了如何使用Ruby和Rails来生成各种类型的报表,包括但不限于销售报告、财务报表、客户行为分析等。 #### 数据可视化 数据可视化是将数据转换为图形或图像的过程,以揭示隐藏在数字背后的信息。本书讲解...

    FusionCharts产品手册.pdf

    FusionCharts Suite XT是一款功能全面、易于使用且高度可定制化的图表制作工具。它不仅能够满足开发者和技术团队的需求,还能够适应不同行业的具体应用情境。无论是构建复杂的企业级仪表板,还是为网站和应用程序...

    FusionCharts_free API

    - **图形例子**:预先制作的图表例子保存在 `FusionChartsFree/Gallery` 文件夹。 - **文档**:位于 `FusionChartsFree/Contents` 文件夹。 #### 四、安装步骤 1. **创建文件夹**:在 Web 应用的根目录下新建一个...

    locale:位置分析工具

    语言环境(在 Safari 上更好) ###我... 首先,使用 URL :howarda9/locale.git 克隆项目,运行 rake db:create ###系统依赖在这个项目的制作中使用了以下技术/库。 Ruby on Rails Angular.js 下划线.js D3.js jQuery

    大公司java笔试题-technology-stack::rocket:详细说明+我们用于dwyl项目的开源技术栈图

    作为一个使用技术制作数码产品的团队, 这是必须要明确的有关技术/工具,我们使用, 让每个人都清楚我们都需要学习/使用什么制造功能齐全、快速、美观、可用和可靠的产品! 如果有任何不清楚或您有任何疑问,请。 ...

    最牛的统计报表 FusionCharts

    附件内含本人测试过的代码。绝对是不可多得统计报表...FusionCharts是一个Flash的图表组件,是制作统计报表,图像报表的最牛选择。 基于Flash技术的产品,都非常的漂亮,内置20套左右的Flash统计图。 效果查看如下: ...

    Lumensee:这是一个Web应用程序,它将告诉您在特定位置可见哪些恒星

    我们的webapp由Ruby on Rails制作,并托管在Heroku上。 我们的webapp的目标是为宇宙提供丰富而新颖的外观。 图表中的恒星大小随表观大小而变化,这是恒星在没有大气层的情况下在地球上所具有的亮度的量度。 每颗...

    JFreeChart制作图形报表

    《JFreeChart制作图形报表》 本文将详细介绍如何使用JFreeChart库创建图形报表,以满足特定的需求。首先,我们从需求分析开始。 在我们的示例中,需求源于一个有趣的场景:通过量化日常感情生活,为决策提供数据...

    FusionCharts_中文产品手册.pdf

    - **核心功能**:FusionCharts Suite XT 是一款强大的图表制作工具,它可以帮助用户快速为Web和企业应用程序创建高质量的图表、仪表板和地图。 - **技术支持**:该产品支持JavaScript (HTML5) 和 Flash 技术,可在...

Global site tag (gtag.js) - Google Analytics