组合highchart图在vue中不起作用

Posted

技术标签:

【中文标题】组合highchart图在vue中不起作用【英文标题】:Combination highchart graph not working in vue 【发布时间】:2020-12-13 12:10:12 【问题描述】:

我正在开发一个 vue 应用程序。我正在使用组合高图来显示数据。我在这里面临的问题是柱形图不起作用。下面是 highcharts 图表的脚本,我在其中设置图表的字段。我在从服务器获取的数据的响应中添加了调试器。我添加了下面的图像,它显示了图表现在的样子。柱形图未显示。请帮我找出哪里出错了。

<script>
  import Chart from 'highcharts-vue';
  export default 
    components: 
      highcharts: Chart
    ,
    data: function() 
      return 
        chartOptions:           
          xAxis: 
            categories: []
          ,
          yAxis: 
            min: 0,
            title: 
              text: 'Rainfall'
            
          ,
          legend: 
            enabled: false
          ,
          title: 
            text: ''
          ,
          tooltip: 
            headerFormat: '<span style="font-size:9px">point.key</span><table>',
            pointFormat: '<tr><td style="color:series.color;padding:0;font-size:9px">series.name: </td>' +
              '<td style="padding:0;font-size:9px"><b>point.y</b></td></tr>',
            footerFormat: '</table>',
            shared: true,
            usehtml: true
          ,
          plotOptions: 
            column: 
              pointPadding: 0.2,
              borderWidth: 0
            
          ,
          series: [
            type: 'column',
            name: '',
            data: []
           , 
           
            type: 'spline',
            name: '',
            data: [],
            marker: 
             lineWidth: 2,
             lineColor: 'red',
             fillColor: 'white'
            
          ]
        
      
    ,
    created: function () 
     this.fetchData();
    ,
    methods: 
     fetchData: function () 
      var that = this;
      url = '/rainfallData.json'
      this.$axios.get(url)
      .then(response => 
        debugger
        that.chartOptions.xAxis.categories = response.data.dates;
        that.chartOptions.series.find((x) => x.type === "spline").data = response.data.series.find(v => v.name === 'TotalRain').data
        that.chartOptions.series[0] = response.data.series;
     );
    
   
 
 </script>

响应数据

response.data.series
[name: 'Toronto', data: [0, 0, 6, 2], name: 'Edmonton', data: [0, 0, 16, 21], name: 'Surrey', data: [0, 0, 16, 2], , name: 'TotalRain', data: [0, 0, 38, 25]]

【问题讨论】:

您的组件的 javascript 已损坏(您在创建后缺少逗号,并且结束括号与开始括号不匹配。您能确定 a)它只是一个复制/粘贴错误,b)您用您在项目中的确切内容更新问题。理想情况下,您应该提供minimal reproducible example。您可能会发现 codesandbox.io 对原型设计很有用。 @tao 对不起先生。这只是一个复制粘贴问题 您能否确保所显示的数据与您所拥有的数据完全相同?你在这里展示的那个是borken。理想情况下,您应该复制/粘贴 json,这样可以确保其中没有拼写错误并且它是有效的。 @tao 再次抱歉。复制/粘贴搞砸了 @WojciechChmiel 问题已解决。我根据需要使用不同的 SQL 查询从 DB 中提取,现在它正在工作。谢谢你 【参考方案1】:

我猜你想达到this。

问题是您将格式错误的数据分配给图表。

最后的系列必须是这样的:

[
  "name": "Toronto",
  "data": [0, 0, 6, 2],
  "type": "column"
, 
  "name": "Edmonton",
  "data": [0, 0, 16, 21],
  "type": "column"
, 
  "name": "Surrey",
  "data": [0, 0, 16, 2],
  "type": "column"
, 
  "type": "spline",
  "marker": 
    "lineWidth": 2,
    "lineColor": "red",
    "fillColor": "white"
  ,
  "data": [0, 0, 38, 25]
]

我删除了其他所有内容,以突出问题。

注意:如果我制作的演示不是您想要实现的,请随时就该特定问题提出另一个问题,以便其他有相同问题的人可以从答案中受益.一般来说,一个好的 SO 问题应该有:

一个可重现的最小示例,理想情况下包含要重现的最少代码 指向文档的链接清楚地说明了您尝试过的应该可行的方法 您所做的任何研究的结果(指向对您不起作用的相关问题的链接)、您尝试过的代码示例等...

但您的问题的答案是:highcharts 对每种类型的图表都有非常具体的格式要求。您必须检查您的 chartOptions 的最终结果,并确保数据结构和值对于您使用的图表类型有效。


如果你的数据是本地的,你可以直接去(就像我一样):

import whatever from './path/to/data.json';

对外部 API 的典型 Vue 调用如下所示

methods: 
  fetchData() 
    this.$http.get('//your.url')
      then(response => 
        console.log(
          'response.data': response.data,
          this,
          that: 'not needed'
        );
      );
  

【讨论】:

以上是关于组合highchart图在vue中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何修复子字符串在 vue.js 3 中不起作用?

MS Access - 自动填充在组合框中不起作用

数组在 Vue 中不起作用

为啥我的 WHERE 子句在我的组合框中不起作用

UIVisualEffectView 在 iOS 14 小部件中不起作用

模块扩充在 .vue 文件中不起作用