【问题标题】:Pagination in Bar chart using ChartJS使用 ChartJS 在条形图中分页
【发布时间】:2017-04-06 07:30:23
【问题描述】:

我正在使用 chartJS 来显示一些带有条形图的数据。 chartJs 存在一些问题。当我需要提交大量数据时,例如 100 个或更多数据字段并且它具有持久的标签,它看起来很丑。

如何配置条形图?

这是我的条形图截图

这是我的FIDDLE

在上面的例子中,我有 100 个数据归档,我可以给这个条形图分页吗?

这是我的代码

var lbl = [];
var dt = [];
for(var i = 1;i<=100;i++){
 lbl.push("this_is_my_lable_name_"+i);
}
for(var i = 1;i<=100;i++){
  dt.push(Math.floor((Math.random() * 100) + 1));
}
var ctx = document.getElementById("myChart");
var myChart = new Chart(ctx, {
    type: 'bar',
    data: {
        labels: lbl,
        datasets: [{
            label: '# of Votes',
            data: dt,
            backgroundColor: [
                'rgba(255, 99, 132, 0.2)',
                'rgba(54, 162, 235, 0.2)',
                'rgba(255, 206, 86, 0.2)',
                'rgba(75, 192, 192, 0.2)',
                'rgba(153, 102, 255, 0.2)',
                'rgba(255, 159, 64, 0.2)'
            ],
            borderColor: [
                'rgba(255,99,132,1)',
                'rgba(54, 162, 235, 1)',
                'rgba(255, 206, 86, 1)',
                'rgba(75, 192, 192, 1)',
                'rgba(153, 102, 255, 1)',
                'rgba(255, 159, 64, 1)'
            ],
            borderWidth: 1
        }]
    },
    options: {
        scales: {
            yAxes: [{
                ticks: {
                    beginAtZero:true
                }
            }]
        }
    }
});

【问题讨论】:

  • 不幸的是,chart.js 中内置了分页功能。但是,有一个名为 chartjs-plugin-zoom 的插件可以为您工作,但您需要对其进行扩展以进行一些更改。以codepen 为例。您可以使用鼠标滚轮滚动到图表中,然后单击并拖动以向左/向右平移。目前没有办法预先设置初始缩放,但您可以扩展插件以添加该功能(应该不会太难)。如果这适合您的需求,请告诉我,我将作为答案提交

标签: javascript jquery css bar-chart chart.js


【解决方案1】:

您可以尝试这个解决方案来考虑这样的图表滚动:

为 y 轴克隆一个不同的画布,这样当你滚动时,只有条形会移动

为y轴添加画布

 <canvas id="myChartAxis" height="600" width="0"></canvas>

现在正在克隆轴

 var sourceCanvas = myLiveChart.chart.canvas;
 var copyWidth = myLiveChart.scales['y-axis-0'].width - 10;
 var copyHeight = myLiveChart.scales['y-axis-0'].height + myLiveChart.scales['y-axis-0'].top + 10;
 var targetCtx = document.getElementById("myChartAxis").getContext("2d");
 targetCtx.canvas.width = copyWidth;
 targetCtx.drawImage(sourceCanvas, 0, 0, copyWidth, copyHeight, 0, 0, copyWidth, copyHeight);

有关演示,请参阅此FIDDLE

为了更好的可视化,最好避免在 x 轴上使用标签,并通过工具提示直观地显示此信息

【讨论】:

  • 谢谢@vinod.. :) 这就是我想要的.. 你是传奇。
【解决方案2】:

您可以使用包装类包装canvas,并相应地更改其宽度以最适合您。另外,如果你不想让图表覆盖整个屏幕,你可以用另一个包装类来包装它。

var lbl = [];
var dt = [];
for (var i = 1; i <= 100; i++) {
    lbl.push("this_is_my_lable_name_" + i);
}
for (var i = 1; i <= 100; i++) {
    dt.push(Math.floor((Math.random() * 100) + 1));
}
var ctx = document.getElementById("myChart");
var myChart = new Chart(ctx, {
    type: 'bar',
    data: {
        labels: lbl,
        datasets: [{
            label: '# of Votes',
            data: dt,
            backgroundColor: [
                'rgba(255, 99, 132, 0.2)',
                'rgba(54, 162, 235, 0.2)',
                'rgba(255, 206, 86, 0.2)',
                'rgba(75, 192, 192, 0.2)',
                'rgba(153, 102, 255, 0.2)',
                'rgba(255, 159, 64, 0.2)'
            ],
            borderColor: [
                'rgba(255,99,132,1)',
                'rgba(54, 162, 235, 1)',
                'rgba(255, 206, 86, 1)',
                'rgba(75, 192, 192, 1)',
                'rgba(153, 102, 255, 1)',
                'rgba(255, 159, 64, 1)'
            ],
            borderWidth: 1
        }]
    },
    options: {
        scales: {
            yAxes: [{
                ticks: {
                    beginAtZero: true
                }
            }]
        }
    }
});
.wrapper {
  width: 600px;
  height: 400px;
  overflow-x: scroll;
}
.chartWrapper {
  width: 6000px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.min.js"></script>
<div class="wrapper">
    <div class="chartWrapper">
        <canvas id="myChart" height="19"></canvas>
    </div>
</div>

JSFiddle

【讨论】:

  • 感谢您的回答,在您的解决方案中,您正在为整个画布应用 X 滚动条,我只想滚动所有条而不是画布。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多