`

ruby调用echart的柱状饼状图

阅读更多
 sql = "select GROUP_CONCAT( DATE_FORMAT(format_date,'%d')  ,'@', chemical_count ) as group_chemical_count, 
 GROUP_CONCAT( DATE_FORMAT(format_date,'%d')  ,'@', vendor_num ) as group_vendor_num, 
 a.format_date_month
from
(select 
chemical_num as chemical_count , 
vendor_num as vendor_num,
DATE_FORMAT(data_statistics.created_at,'%Y-%m-%d') as format_date , 
DATE_FORMAT(data_statistics.created_at,'%Y-%m') as format_date_month
from data_statistics
where created_at >= '#{@start_time}' and created_at < '#{@end_time}'
group by format_date) as a
group by a.format_date_month"

@reports = Inquiry.find_by_sql(sql) 
@product_charts = {} 
@company_charts = {} 
@report_month = []
@reports.each do |report|
month = report["format_date_month"] + "-01"
    search_day = DateTime.parse(month).to_date
    end_date = search_day.at_end_of_month.strftime("%d").to_i
         _product_charts_data = []
         _company_charts_data = []
    (1..end_date).each do |_|
      _product_charts_data << (report["group_chemical_count"].match(/#{_.to_s.rjust(2,"0") }@\d+/) ? report["group_chemical_count"].match(/#{_.to_s.rjust(2,"0")}@\d+/)[0].split("@")[1].to_i : 0 )
      _company_charts_data << (report["group_vendor_num"].match(/#{_.to_s.rjust(2,"0") }@\d+/) ? report["group_vendor_num"].match(/#{_.to_s.rjust(2,"0")}@\d+/)[0].split("@")[1].to_i : 0 )
    end
    @report_month << report['format_date_month'].delete('-')
    @product_charts[(report['format_date_month'].delete('-'))] = _product_charts_data
    @company_charts[(report['format_date_month'].delete('-'))] = _company_charts_data
end
@chart_data_x = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]
@chart_data_tab = @report_month
@chart_list = ['new vendor','new product']
@charts1 = @company_charts.to_json
@charts2 = @product_charts.to_json


<%= javascript_include_tag 'echarts.min' %>
<script type="text/javascript">
var div_tag = "<%= div_id %>"
var myChart = echarts.init(document.getElementById(div_tag));
var dataMap = {};

function dataFormatter(obj) {
    var temp;
    <% @chart_data_tab.each do |year| %>   
        var max = 0;
        var sum = 0;
        temp = obj["<%= year %>"];
        for (var i = 0, l = temp.length; i < l; i++) {
            max = Math.max(max, temp[i]);
            sum += temp[i];
            obj["<%= year %>"][i] = {
                name : i,
                value : temp[i]
            }
        }
        obj["<%= year %>max"] = Math.floor(max / 100) * 100;
        obj["<%= year %>sum"] = sum;
    <% end %>
    return obj;
}


<% (1..@chart_list.size).each do |i|%>
  var aa= "<%= eval('@charts'+i.to_s) %>".replace(/"/g,""); 
  eval("(dataMap.dataChart" + <%=i%> + " = dataFormatter" +'(' + aa + '))');
<% end %>

var option = {
    baseOption: {
        timeline: {
            // y: 0,
            axisType: 'category',
            // realtime: false,
            // loop: false,
            autoPlay: true,
            // currentIndex: 2,
            playInterval: 1000,
            // controlStyle: {
            //     position: 'left'
            // },
            data: [
                 <%= @chart_data_tab.join(",") %>
            ],
            label: {
                formatter : function(s) {
                    return (new Date(s)).getFullYear();
                }
            }
        },
        tooltip: {
        },
        legend: {
            x: 'right',
            data: eval("("+"<%= @chart_list %>".replace(/"/g,"'")+")")
        },
        calculable : true,
        grid: {
            top: 80,
            bottom: 100,
            tooltip: {
                trigger: 'axis',
                axisPointer: {
                    type: 'shadow',
                    label: {
                        show: true,
                        formatter: function (params) {
                            return params.value.replace('\n', '');
                        }
                    }
                }
            }
        },
        xAxis: [
            {
                'type':'category',
                'axisLabel':{'interval':0},
                'data': <%= @chart_data_x %>,
                splitLine: {show: false}
            }
        ],
        yAxis: [
            {
                type: 'value',
                name: 'increased qty'
            }
        ],
        series: [
            <% @chart_list.each do |c|%>
             {name: '<%=c%>', type: 'bar'},   
            <% end %>
            { 
                type: 'pie',
                center: ['75%', '35%'],
                radius: '18%',
                z: 100
            }
        ]
    },
    options: [
        <% @chart_data_tab.each_with_index do |y,index|%>
            {
            title: {text: '<%=y[0..3]+"-"+y[4..-1]%>'+" <%=@chart_list.join(' / ')%>"},
            series: [
                <% (1..@chart_list.size).each do |i|%>
                 {data: eval("(dataMap.dataChart<%=i%>['<%=y%>'])") },
                <% end %>
                 {data: [
                <% @chart_list.each_with_index do |c,i|%>
                  {name: '<%=c%>', value: eval("(dataMap.dataChart<%=i+1%>['<%=y%>sum'])") },
                <% end %>
                  ]}
            ]
            },
        <% end %>
    ]
}

myChart.setOption(option);

</script>
  • 大小: 61.1 KB
0
1
分享到:
评论

相关推荐

    ruby 报表统计--生成柱状图和饼图

    总的来说,使用Ruby和FusionCharts生成柱状图和饼图是一种高效的方法,可以帮助我们直观地展示统计报表,便于理解和分析数据。通过深入学习和实践,你将能够创建出更加复杂和富有交互性的数据可视化应用。

    ice最简单实现 ruby调用ice接口 - Ruby - language - ITeye论坛

    标题中的“ice最简单实现 ruby调用ice接口”是指在Ruby编程语言中使用ICE(Internet Communication Engine)框架来实现远程方法调用(RPC)。ICE是由ZeroC开发的一种跨平台、高性能的中间件,它允许不同语言的应用...

    iOs使用Charts框架绘制饼状图创建饼状图对象用到类是PieChartView.h, 代码如下.zip

    Charts是一个强大的图表库,由Daniel Gindi开发,适用于iOS、tvOS和macOS平台,它提供了丰富的图表类型,包括柱状图、线形图以及我们关注的饼状图。 首先,要使用Charts框架,我们需要在Xcode项目中添加依赖。可以...

    从Ruby语言调用Python函数-Ruby开发

    PyCall:从Ruby语言中调用Python函数该库提供了直接从Ruby语言中调用Python并与之进行部分互操作的功能。 您可以在PyCall中导入任意Python模块:从Ruby语言调用Python函数该库提供了直接从Ruby语言调用Python并与之...

    Ruby-PyCall从Ruby语言调用Python函数

    Ruby-PyCall是一个非常有用的库,它允许Ruby程序员无缝地调用Python的函数和模块,极大地扩展了Ruby的生态系统。这个库使得两个语言之间的交互变得简单而高效,特别是在需要利用Python的强大科学计算或数据处理能力...

    Ruby-OurPC是gRPC客户端和服务器的实验性实现

    Ruby-OurPC是一个针对gRPC框架的实验性实现,它为开发者提供了在Ruby环境中构建gRPC客户端和服务器的能力。gRPC是一个高性能、开源和通用的RPC(远程过程调用)框架,它基于HTTP/2协议设计,支持多种编程语言,包括...

    ruby对excel的操作 详细操作

    这行代码`require 'win32ole'`使得Ruby程序能够调用Excel的API。 2. **启动Excel应用** 创建一个新的Excel应用实例,可以通过`WIN32OLE::new('excel.Application')`来实现。例如: ```ruby excel = WIN32OLE::...

    Ruby-kitabu一个框架使用Ruby来从Markdown创建电子书籍

    Ruby-kitabu是一个基于Ruby语言的框架,专为创建电子书籍设计。它的核心目标是将Markdown格式的内容转换成各种常见的电子书格式,如PDF、EPUB、Mobi、Text以及HTML,让作者能够轻松地从文本内容制作出专业的电子出版...

    flash动画柱状图

    FusionCharts free 是一个跨平台,跨浏览器的flash图表组件解决方案,能够被 ASP.NET, ASP, PHP, JSP, ColdFusion, Ruby on Rails, 简单 HTML页面甚至PPT调用。你不需要知道任何关于flash编程的知识,你只需要知道...

    ruby图片处理工具

    Rmagick 允许 Ruby 开发者通过简单的 API 调用来处理图像,包括读取、写入、转换和操作各种格式的图像文件。在给定的文件列表中,`rmagick-2.10.0-x86-mswin32.gem` 就是这个库的安装包,适用于 32 位的 Windows ...

    pycall.rb:从Ruby语言调用Python函数

    该库提供了直接从Ruby语言调用Python并与之进行部分互操作的功能。 您可以将任意Python模块导入Ruby模块,通过从Ruby到Python的自动类型转换来调用Python函数。 支持的Ruby版本 pycall.rb支持Ruby 2.3或更高版本。 ...

    forecast-ruby, 用于从预测天气API中检索数据的ruby gem.zip

    forecast-ruby, 用于从预测天气API中检索数据的ruby gem forecast_ioruby 中的forecast.io API包装器。安装gem install forecast_io或者你的Gemfilegem 'forecast_io'用法确保你需要库。requir

    ruby-nmap, Nmap探测工具和安全/端口扫描器的Rubyful接口.zip

    ruby-nmap, Nmap探测工具和安全/端口扫描器的Rubyful接口 ruby源代码问题文档文档[Email] ( mailto: 后端,gmail.com) 处的mod3 描述to nmap,探测工具和安全/端口扫描器的ruby 界面。特性为运行nmap提供一个 ruby ...

    Ruby-RubyGraphVizGraphViz绘图工具的Ruby接口

    RubyGraphViz是Ruby编程语言与GraphViz图形渲染库之间的接口,允许开发者在Ruby程序中生成复杂的图形和图表。GraphViz是一个强大的开源图形绘制软件,它能够自动生成有向无环图(DAG)、树状图、网络图等多种类型的...

    Ruby Ruby Ruby Ruby Ruby Ruby

    Ruby Ruby Ruby Ruby Ruby Ruby

    ruby脚本交互.rar

    两者结合可能是为了让易语言程序调用Ruby脚本执行特定任务,比如利用Ruby的网络库进行数据抓取或分析。通过调用系统命令或使用子进程,易语言程序可以启动并控制Ruby脚本,实现功能互补。 4. **Ruby的脚本执行**: ...

    ruby-rust-interop:展示在 Ruby 运行时中从 Rust 调用基于数字的函数

    ruby-rust-互操作展示在 Ruby 运行时中从 Rust 调用基于数字的函数我希望这些例子能帮助你使用 Rust 设置 Ruby! 所有这些示例都在使用 Ruby 2.1.6 和 Rust 1.0.0-beta.4 的 Windows 上进行了测试如果你克隆 repo,...

    nyaplot, 用于 ruby的交互式绘图生成器.zip

    nyaplot, 用于 ruby的交互式绘图生成器 Nyaplot Nyaplot是用于 ruby 用户的交互式绘图生成器。 它的目标是在 ruby 中创建交互式绘图,并且仍然允许快速Prototype化。定制和与其他科学 Gems的集成。Nyaplot是来自'nya...

    Ruby-LazyHighCharts一个简单和非常灵活的方式从ruby代码使用HighCharts

    此外,它的灵活性体现在可以自定义各种图表类型,包括折线图、柱状图、饼图、散点图等多种图表,并能自由配置颜色、数据系列、轴标签、图例、工具提示等各种细节。 在Ruby on Rails环境中,Ruby-LazyHighCharts可以...

Global site tag (gtag.js) - Google Analytics