如何在chart.js中绘制后弯线

goucqfw6  于 2024-01-07  发布在  Chart.js
关注(0)|答案(1)|浏览(216)

我想用chart.js画一条向后弯曲的线。
例如:方程x=-(y-1)**2+1应该创建这个图:

我在我的网页中使用python和flask。在flask路由中生成图形数据的代码如下所示:

@bp.route('/chart', methods=('GET',))
def chart():
    y = np.linspace(0, 2, 10).tolist()
    x = [-(i-1)**2+1 for i in y]

    return render_template(
        'chart.html',
        x=x,
        y=y
    )

字符串
我的HTML文件看起来像这样:

<div>
    <meta id="x" data-x="{{ x }}">
    <meta id="y" data-y="{{ y }}">
    <canvas id="chart"></canvas>
</div>

<script src="https://cdn.jsdelivr.net/npm/chart.js@4/dist/chart.umd.min.js"></script>
<script>
const canvas = document.getElementById('chart');
const x = JSON.parse(document.getElementById('x').getAttribute('data-x'));
const y = JSON.parse(document.getElementById('y').getAttribute('data-y'));

new Chart(canvas, {
    type: 'line',
    data: {
        labels: x,
        datasets: [{
            label: 'Backwards-Bending Line',
            data: y,
            borderWidth: 1
        }]
    },
})
</script>


这段代码创建了下面的图:

你可以看到x轴先增加后减少,而不是向后弯曲。我怎样才能让这条线向后弯曲?

a2mppw5e

a2mppw5e1#

Chart.js配置中,您应该摆脱data.labels,而是将datasets.data定义为array对象,每个对象都有xy属性。
您的案例的简化结果如下所示:

new Chart('chart', {
    type: 'line',
    data: {
        datasets: [{
            label: 'Backwards-Bending Line',
            data: [
                {x: 0, y: 20}, 
                {x: 5, y: 15}, 
                {x: 8, y: 10}, 
                {x: 5, y: 5}, 
                {x: 0, y: 0}
            ],
            borderWidth: 1,
            tension: 0.3
        }]
    },
    options: {
        responsive: false,
        aspectRatio: 1,
        scales: {
            x: {
                type: 'linear'
            }
        }
    }
});

个字符
另请参阅Chart.js文档中的数据结构>对象[]。

相关问题