2014-06-19 3 views
0

하나의 그래프를 클릭 할 때 동일한 데이터를 공유하는 여러 그래프에서 Highcharts 드릴 다운을 사용할 수 있습니까? 예를 들어, 데모 코드 (브라우저 백분율)를 사용하는 JSFiddle을 포함 시켰습니다. http://jsfiddle.net/Pq6gb/동일한 데이터가있는 여러 개의 Highchart에서 드릴 다운

var gridster; 

$(function(){ 
gridster = $(".gridster ul").gridster({ 
    widget_base_dimensions: [150, 150], 
    widget_margins: [5, 5], 
    helper: 'clone', 
    resize: { 
     enabled: true, 
     stop: function(e, ui, $widget) { 
      for (var i = 0; i < Highcharts.charts.length; i++) { 
       Highcharts.charts[i].reflow(); 
      } 
     } 
    } 
}).data('gridster'); 
}); 

$(function() { 

Highcharts.data({ 
    csv: document.getElementById('tsv').innerHTML, 
    itemDelimiter: '\t', 
    parsed: function (columns) { 

     var brands = {}, 
      brandsData = [], 
      versions = {}, 
      drilldownSeries = []; 

     // Parse percentage strings 
     columns[1] = $.map(columns[1], function (value) { 
      if (value.indexOf('%') === value.length - 1) { 
       value = parseFloat(value); 
      } 
      return value; 
     }); 

     $.each(columns[0], function (i, name) { 
      var brand, 
       version; 

      if (i > 0) { 

       // Remove special edition notes 
       name = name.split(' -')[0]; 

       // Split into brand and version 
       version = name.match(/([0-9]+[\.0-9x]*)/); 
       if (version) { 
        version = version[0]; 
       } 
       brand = name.replace(version, ''); 

       // Create the main data 
       if (!brands[brand]) { 
        brands[brand] = columns[1][i]; 
       } else { 
        brands[brand] += columns[1][i]; 
       } 

       // Create the version data 
       if (version !== null) { 
        if (!versions[brand]) { 
         versions[brand] = []; 
        } 
        versions[brand].push(['v' + version, columns[1][i]]); 
       } 
      } 

     }); 

     $.each(brands, function (name, y) { 
      brandsData.push({ 
       name: name, 
       y: y, 
       drilldown: versions[name] ? name : null 
      }); 
     }); 
     $.each(versions, function (key, value) { 
      drilldownSeries.push({ 
       name: key, 
       id: key, 
       data: value 
      }); 
     }); 

     // Create the chart 
     $('#container').highcharts({ 
      chart: { 
       type: 'pie' 
      }, 
      title: { 
       text: 'Browser market shares. November, 2013.' 
      }, 
      subtitle: { 
       text: 'Click the slices to view versions. Source: netmarketshare.com.' 
      }, 
      plotOptions: { 
       series: { 
        dataLabels: { 
         enabled: true, 
         format: '{point.name}: {point.y:.1f}%' 
        } 
       } 
      }, 

      tooltip: { 
       headerFormat: '<span style="font-size:11px">{series.name}</span><br>', 
       pointFormat: '<span style="color:{point.color}">{point.name}</span>: <b>{point.y:.2f}%</b> of total<br/>' 
      }, 

      series: [{ 
       name: 'Brands', 
       colorByPoint: true, 
       data: brandsData 
      }], 
      drilldown: { 
       series: drilldownSeries 
      } 
     }) 

    } 
}); 
}); 

$(function() { 

Highcharts.data({ 
    csv: document.getElementById('tsv').innerHTML, 
    itemDelimiter: '\t', 
    parsed: function (columns) { 

     var brands = {}, 
      brandsData = [], 
      versions = {}, 
      drilldownSeries = []; 

     // Parse percentage strings 
     columns[1] = $.map(columns[1], function (value) { 
      if (value.indexOf('%') === value.length - 1) { 
       value = parseFloat(value); 
      } 
      return value; 
     }); 

     $.each(columns[0], function (i, name) { 
      var brand, 
       version; 

      if (i > 0) { 

       // Remove special edition notes 
       name = name.split(' -')[0]; 

       // Split into brand and version 
       version = name.match(/([0-9]+[\.0-9x]*)/); 
       if (version) { 
        version = version[0]; 
       } 
       brand = name.replace(version, ''); 

       // Create the main data 
       if (!brands[brand]) { 
        brands[brand] = columns[1][i]; 
       } else { 
        brands[brand] += columns[1][i]; 
       } 

       // Create the version data 
       if (version !== null) { 
        if (!versions[brand]) { 
         versions[brand] = []; 
        } 
        versions[brand].push(['v' + version, columns[1][i]]); 
       } 
      } 

     }); 

     $.each(brands, function (name, y) { 
      brandsData.push({ 
       name: name, 
       y: y, 
       drilldown: versions[name] ? name : null 
      }); 
     }); 
     $.each(versions, function (key, value) { 
      drilldownSeries.push({ 
       name: key, 
       id: key, 
       data: value 
      }); 
     }); 

     // Create the chart 
     $('#container2').highcharts({ 
      chart: { 
       type: 'column' 
      }, 
      title: { 
       text: 'Browser market shares. November, 2013' 
      }, 
      subtitle: { 
       text: 'Click the columns to view versions. Source: netmarketshare.com.' 
      }, 
      xAxis: { 
       type: 'category' 
      }, 
      yAxis: { 
       title: { 
        text: 'Total percent market share' 
       } 
      }, 
      legend: { 
       enabled: false 
      }, 
      plotOptions: { 
       series: { 
        borderWidth: 0, 
        dataLabels: { 
         enabled: true, 
         format: '{point.y:.1f}%' 
        } 
       } 
      }, 

      tooltip: { 
       headerFormat: '<span style="font-size:11px">{series.name}</span><br>', 
       pointFormat: '<span style="color:{point.color}">{point.name}</span>: <b>{point.y:.2f}%</b> of total<br/>' 
      }, 

      series: [{ 
       name: 'Brands', 
       colorByPoint: true, 
       data: brandsData 
      }], 
      drilldown: { 
       series: drilldownSeries 
      } 
     }) 

    } 
}); 
}); 

이 파이 차트와 같은 데이터를 표시하는 막대 그래프이다 개별적으로 드릴 다운 할 수 있습니다. 파이/가로 막 대형 차트의 모든 브라우저를 클릭하고 해당 차트를 두 브라우저 모두의 필터로 다운 시키길 원합니다.

어떻게해야합니까? 감사.

답변

0

예, 가능합니다. 두 번째에 전화 drilldown event

  • 당신이 하나 개의 차트에 drillup even에 두 번째 차트와 간단한 통화 1point.doDrilldown (1)

  • 에 각각 지점을 찾을 수 있습니다 : 이것은 당신이 구현해야 할 것입니다 chart.drillUp()

참고 : - J 당신은 무한 루프 알고 있어야합니다 (하나 개의 차트에서 예를 drillUp()을 위해하는 것입니다 drillUp() 첫번째 차트 다시 .. 드릴 업 이벤트를 호출합니다) 사용자가 클릭 할 때마다 한 번만 drillUp/doDrilldown을 호출하는 플래그를 추가하십시오.

관련 문제