You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在jQuery中创建带折线的柱状图(Bar Chart + Line)

嘿,我来帮你搞定这个柱状图+折线图的组合图表问题!其实这种组合图表实现起来并不复杂,我给你用两个最常用的工具分别写了示例,你可以根据自己的技术栈来选:

使用Python Matplotlib实现组合图表

Matplotlib是Python生态里最常用的可视化库,实现双图组合的核心思路是共享X轴,使用两个独立的Y轴来分别承载柱状图和折线图:

import matplotlib.pyplot as plt
import numpy as np

# 准备示例数据(你可以替换成自己的业务数据)
categories = ['一月', '二月', '三月', '四月', '五月']
bar_data = [45, 60, 55, 70, 65]  # 柱状图对应的数值(比如月度销售额)
line_data = [12, 15, 14, 18, 16]  # 折线图对应的数值(比如月度增长率)

# 创建画布和主坐标轴(用于画柱状图)
fig, ax1 = plt.subplots(figsize=(8, 5))

# 绘制柱状图
bar_color = '#2c3e50'
ax1.bar(categories, bar_data, color=bar_color, alpha=0.7, label='月度销售额(万元)')
ax1.set_xlabel('月份')
ax1.set_ylabel('销售额(万元)', color=bar_color)
ax1.tick_params(axis='y', labelcolor=bar_color)

# 创建共享X轴的副坐标轴(用于画折线图)
ax2 = ax1.twinx()
line_color = '#e74c3c'
ax2.plot(categories, line_data, color=line_color, marker='o', linewidth=2, label='月度增长率(%)')
ax2.set_ylabel('增长率(%)', color=line_color)
ax2.tick_params(axis='y', labelcolor=line_color)

# 合并两个坐标轴的图例,避免分开显示
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper left')

# 添加标题并调整布局
plt.title('月度销售额与增长率组合分析图')
plt.tight_layout()
plt.show()

关键说明:

  • twinx()方法是核心,它能创建一个和主坐标轴共享X轴的副坐标轴,完美解决两种数据数值范围差异大的问题
  • 用不同颜色区分两个图表的元素(坐标轴标签、线条/柱子颜色),提升可读性
  • 合并图例让读者能一眼看懂每个元素的含义
使用前端Chart.js实现组合图表

如果是前端项目,Chart.js是个轻量且易用的选择,它支持在同一个图表中混合不同类型的数据集:

首先在HTML中准备画布容器:

<canvas id="combinedChart" width="800" height="400"></canvas>

然后编写JavaScript代码初始化图表:

// 获取画布上下文
const ctx = document.getElementById('combinedChart').getContext('2d');

// 创建组合图表
const combinedChart = new Chart(ctx, {
    type: 'bar', // 基础图表类型设为柱状图
    data: {
        labels: ['一月', '二月', '三月', '四月', '五月'],
        datasets: [
            // 柱状图数据集
            {
                label: '月度销售额(万元)',
                data: [45, 60, 55, 70, 65],
                backgroundColor: '#2c3e50',
                borderColor: '#2c3e50',
                borderWidth: 1,
                yAxisID: 'y' // 绑定到主Y轴
            },
            // 折线图数据集(单独指定type为line)
            {
                label: '月度增长率(%)',
                data: [12, 15, 14, 18, 16],
                type: 'line',
                backgroundColor: '#e74c3c',
                borderColor: '#e74c3c',
                borderWidth: 2,
                pointBackgroundColor: '#fff',
                pointBorderColor: '#e74c3c',
                pointRadius: 5,
                yAxisID: 'y1' // 绑定到副Y轴
            }
        ]
    },
    options: {
        responsive: true,
        scales: {
            // 主Y轴(对应柱状图)
            y: {
                beginAtZero: true,
                title: {
                    display: true,
                    text: '销售额(万元)'
                }
            },
            // 副Y轴(对应折线图)
            y1: {
                position: 'right',
                beginAtZero: true,
                title: {
                    display: true,
                    text: '增长率(%)'
                },
                grid: {
                    drawOnChartArea: false // 隐藏副轴网格线,避免图表混乱
                }
            }
        },
        plugins: {
            title: {
                display: true,
                text: '月度销售额与增长率组合分析图'
            },
            legend: {
                position: 'upper left'
            }
        }
    }
});

关键说明:

  • 在折线图的数据集中单独指定type: 'line',就能在柱状图基础上叠加折线
  • 通过yAxisID将不同数据集绑定到对应的Y轴,解决数值范围差异问题
  • 可以自定义标记点、线条宽度等样式,让图表更贴合你的需求
通用小技巧
  • 颜色区分:一定要用对比度高的颜色区分两种图表,比如深色柱子配亮色折线
  • 双Y轴必要性:如果两个数据的数值范围差异较大(比如销售额是几十,增长率是十几),必须用双Y轴,否则折线会被柱子“淹没”
  • 图例与标签:清晰的标题、坐标轴标签和图例是图表可读性的关键,不要省略

内容的提问来源于stack exchange,提问作者kayum iman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:38:24