如何在两个不同的div中在同一行显示两个C3图表

How to display two C3 charts in the same row in two different divs

我在使用 c3 插件时遇到了一些问题。 我试图将 2 个图表放在这样的结构中:

<div class="row">
    <div class="col-6">
        <div id="chart1"></div>
    </div>
    <div class="col-6">
        <div id="chart2"></div> 
    </div>
</div>

我的输出是附件,我找不到图表超出 div 的原因。

我已经尝试使用 chart.resize() 但它不起作用(也许我把它放错了地方)。 你能帮助我吗 ?

你可以在这里找到我的代码: js1, js2, html

谢谢!

问题是您在页面加载时未显示的 div 中加载图表(我认为!),C3 不知道如何正确调整图表大小。
不要加载 Document Ready 中的每个图表,而是将您的帖子包装在这样的函数中:

function loadStatArticoliCharts() {
    $.post(
        '{{ url('myGetter') }}/{{ data.listId }}',
        {},
        function(data) {
            grafico_fatturato = c3.generate({
                bindto: "#fatturato-mensile-barre",
                data: {
                    columns: [
                        [new Date().getFullYear() - 1, 0,0,0,0,0,0,0,0,0,0,0,0],
                        [new Date().getFullYear(), 0,0,0,0,0,0,0,0,0,0,0,0],
                    ],
                    type : 'bar',
                    colors: data.colors
                },
                bar: {
                    width: 30
                },
                axis: {
                    x: {
                        type: 'category',
                        categories: months
                    },
                    y: {
                        tick: {
                            format: function(value) { return value.formatMoney(2, ',', '.') }
                        }
                    }
                },
                tooltip: {
                    format: {
                        value: function(value) { return "€ " + value.formatMoney(2, ",", "."); }
                    }
                },
                transition: {
                    duration: 1000
                }
            });
            setTimeout(function() {
                grafico_fatturato.load({
                    columns: [
                        data.columns.current,
                        data.columns.past
                    ],
                });
                grafico_fatturato.resize();
            }, 500);
        }
    );
}

如果您已经加载图表(这样您就不会多次触发加载),请创建一个全局布尔变量来存储

let loadedChart1 = false;
let loadedChart2 = false;

最后创建一个控制器,当您点击选项卡时将触发加载功能:

$('a[data-toggle="tab"]').on('shown.bs.tab', function (ev) {
    let tabId = $(ev.target).attr("aria-controls");
    switch (tabId) {
        case "chart1":
            if (!loadedChart1) {
                loadChart1();
                loadedChart1 = true;
            }
            break;
        case "chart2":
            if (!loadedChart2) {
                loadChart2();
                loadedChart2 = true;
            }
            break;
    }
    let oldTabId = $(ev.relatedTarget).attr("aria-controls");
    $('#' + oldTabId).removeClass("active");
}