首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery图,按输入图生成的图表不起作用。

jQuery图,按输入图生成的图表不起作用。
EN

Stack Overflow用户
提问于 2019-04-06 12:21:30
回答 1查看 1.1K关注 0票数 1

嗨,最近我试了莫里斯地区图,它是好的。但很难理解这些数据是如何在那里获取的。

我看过文档https://morrisjs.github.io/morris.js/lines.html &我在这里制作了样例图

代码语言:javascript
复制
 var data = [
          { y: '2014', a: 50, b: 90},
          { y: '2015', a: 65,  b: 75},
          { y: '2016', a: 50,  b: 50},
          { y: '2017', a: 75,  b: 60},
          { y: '2018', a: 80,  b: 65},
          { y: '2019', a: 90,  b: 70},
          { y: '2020', a: 100, b: 75},
          { y: '2021', a: 115, b: 75},
          { y: '2022', a: 120, b: 85},
          { y: '2023', a: 145, b: 85},
          { y: '2024', a: 160, b: 95}
        ],
        config = {
          data: data,
          xkey: 'y',
          ykeys: ['a', 'b'],
          labels: ['Total Income', 'Total Outcome'],
          fillOpacity: 0.6,
          hideHover: 'auto',
          behaveLikeLine: true,
          resize: true,
          pointFillColors:['#ffffff'],
          pointStrokeColors: ['black'],
          lineColors:['gray','red']
      };
    config.element = 'area-chart';
    Morris.Area(config);
代码语言:javascript
复制
  #area-chart{
      min-height: 250px;
    }
代码语言:javascript
复制
 <head>
    <meta charset=utf-8 />
    <title>Morris.js Area Chart</title>
    </head>
    <body>
      <h3 class="text-primary text-center">
        Morris js charts
      </h3>
      <div class"row">
        <div class="col-sm-12 text-center">
          <label class="label label-success">Area Chart</label>
          <div id="area-chart" ></div>
        </div>
        
    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.css">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.min.js"></script> 
        
        
        
      </div>
    </body>

但我现在有不同的要求。

在Y轴中,我必须将年份和x轴放在一起,我必须在图表中显示以下数据。

代码语言:javascript
复制
Initial  gain  total_gain  year
 100    10    110          1
 100    25    125          2
 200    20    220          1
 1200   180   1380         1
 1200   720   1920         3

但我不知道怎样才能在图表中实现这一点。如果有人能理解这是如何工作的,那么请帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-06 12:43:03

函数getData只是将原始数据转换成正确的格式,这样就不会与当前的莫里斯图表配置(xkeyykeys)发生格式冲突。

尽管最有趣的部分是parseTimexLabelFormat。通过设置parseTime false,您可以告诉这个库,您不希望将数据转换为Date-objects。因此,您可以更多地控制如何将数据打印到x轴上。此外,您可以使用xLabelFormat实际打印您想要的数据。在这个例子中,对应的回调函数记住最后一个currentYear-Number,这样这个数字就可以被下一个数字递增。

代码语言:javascript
复制
function getData(sets) {
    var result = [];
    sets.forEach(function(set) {
        result.push({
            y: set.year.toString(),
            a: set.Initial,
            b: set.Initial + set.gain
        });
    });
    return result;
}

var data = getData([{
            Initial: 100,
            gain: 10,
            year: 1
        },
        {
            Initial: 100,
            gain: 25,
            year: 2
        },
        {
            Initial: 200,
            gain: 20,
            year: 1
        },
        {
            Initial: 1200,
            gain: 180,
            year: 1
        },
        {
            Initial: 1200,
            gain: 720,
            year: 3
        },
    ]),
    config = {
        data: data,
        xkey: 'y',
        parseTime: false,
        xLabelFormat: function(y) {
            this.currentYear = this.currentYear ? (+this.currentYear) + (+y.label) : y.label;
            return this.currentYear;
        },
        ykeys: ['a', 'b'],
        labels: ['Total Income', 'Total Outcome'],
        fillOpacity: 0.6,
        hideHover: 'auto',
        behaveLikeLine: true,
        resize: true,
        pointFillColors: ['#ffffff'],
        pointStrokeColors: ['black'],
        lineColors: ['gray', 'red']
    };
config.element = 'area-chart';
Morris.Area(config);
代码语言:javascript
复制
#area-chart{
      min-height: 250px;
    }
代码语言:javascript
复制
<head>
    <meta charset=utf-8 />
    <title>Morris.js Area Chart</title>
    </head>
    <body>
      <h3 class="text-primary text-center">
        Morris js charts
      </h3>
      <div class"row">
        <div class="col-sm-12 text-center">
          <label class="label label-success">Area Chart</label>
          <div id="area-chart" ></div>
        </div>
        
    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.css">
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/morris.js/0.5.1/morris.min.js"></script> 
        
        
        
      </div>
    </body>

附注:实际上,我已经创建了一个函数(getData)来以正确的格式构建data,这样它就不会与图表配置发生冲突。因此,当您想要更改图表配置时,您也必须更改getData

我还提供了一个小提琴来展示如何利用调整大小的事件来放大这个莫里斯图。在本例中,当您放大时,图表将分成两个图表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55549025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档