当前位置:首页 > JavaScript

js实现柱状图排序

2026-03-01 23:51:56JavaScript

使用 D3.js 实现柱状图排序

D3.js 是一个强大的 JavaScript 库,适合用于数据可视化。以下是使用 D3.js 实现柱状图排序的步骤。

安装 D3.js:

<script src="https://d3js.org/d3.v7.min.js"></script>

创建 SVG 容器:

const svg = d3.select("body").append("svg")
    .attr("width", 500)
    .attr("height", 300);

绑定数据并绘制初始柱状图:

const data = [10, 20, 30, 40, 50];
const rects = svg.selectAll("rect")
    .data(data)
    .enter()
    .append("rect")
    .attr("x", (d, i) => i * 50)
    .attr("y", d => 300 - d * 5)
    .attr("width", 40)
    .attr("height", d => d * 5)
    .attr("fill", "steelblue");

添加排序按钮和逻辑:

d3.select("body").append("button")
    .text("Sort")
    .on("click", function() {
        data.sort((a, b) => b - a); // 降序排序
        rects.data(data)
            .transition()
            .duration(1000)
            .attr("x", (d, i) => i * 50)
            .attr("y", d => 300 - d * 5)
            .attr("height", d => d * 5);
    });

使用 Chart.js 实现柱状图排序

Chart.js 是一个简单易用的图表库,适合快速实现排序功能。

安装 Chart.js:

<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>

创建柱状图:

const ctx = document.getElementById('myChart').getContext('2d');
const chart = new Chart(ctx, {
    type: 'bar',
    data: {
        labels: ['A', 'B', 'C', 'D', 'E'],
        datasets: [{
            label: 'Data',
            data: [10, 20, 30, 40, 50],
            backgroundColor: 'rgba(75, 192, 192, 0.2)',
            borderColor: 'rgba(75, 192, 192, 1)',
            borderWidth: 1
        }]
    },
    options: { responsive: true }
});

添加排序功能:

document.getElementById('sortBtn').addEventListener('click', () => {
    const sortedData = [...chart.data.datasets[0].data].sort((a, b) => b - a);
    chart.data.datasets[0].data = sortedData;
    chart.update();
});

纯 JavaScript 实现柱状图排序

如果不依赖第三方库,可以使用纯 JavaScript 和 CSS 实现。

HTML 结构:

<div class="chart-container">
    <div class="bar" style="height: 10%;"></div>
    <div class="bar" style="height: 20%;"></div>
    <div class="bar" style="height: 30%;"></div>
    <div class="bar" style="height: 40%;"></div>
    <div class="bar" style="height: 50%;"></div>
</div>
<button id="sortBtn">Sort</button>

JavaScript 排序逻辑:

document.getElementById('sortBtn').addEventListener('click', () => {
    const bars = Array.from(document.querySelectorAll('.bar'));
    bars.sort((a, b) => 
        parseFloat(b.style.height) - parseFloat(a.style.height)
    );
    const container = document.querySelector('.chart-container');
    container.innerHTML = '';
    bars.forEach(bar => container.appendChild(bar));
});

CSS 样式:

js实现柱状图排序

.chart-container {
    display: flex;
    height: 300px;
    align-items: flex-end;
    gap: 10px;
}
.bar {
    width: 40px;
    background-color: steelblue;
    transition: height 0.5s;
}

以上方法分别使用 D3.js、Chart.js 和纯 JavaScript 实现了柱状图的排序功能,可根据项目需求选择适合的方案。

标签: 柱状图js
分享给朋友:

相关文章

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…