柱状图 (Bar Chart)

 前端   小卒子   2024-10-10 14:50   99

ECharts 柱状图:深入学习垂直和水平柱状图的配置

ECharts 是一个功能强大的数据可视化库,能够帮助开发者创建多种图表类型。在本文中,我们将深入探讨柱状图的使用,包括垂直柱状图和水平柱状图的配置方法,以及堆叠柱状图和分组柱状图的处理。

一、柱状图的基础知识

柱状图是最常见的数据可视化图表之一,通常用于比较不同类别的数据。ECharts 支持多种类型的柱状图,包括:

  • 垂直柱状图:默认类型,常用于展示各类的数量。
  • 水平柱状图:适用于数据项较多或名称较长的情况。
  • 堆叠柱状图:用于展示各类的组成部分,便于比较整体和部分。
  • 分组柱状图:用于比较多个系列的不同类别。

二、安装 ECharts

在开始之前,请确保在项目中引入 ECharts。可以通过 CDN 进行引入:

<script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>

三、创建基本的柱状图

1. 定义 HTML 结构

首先,定义一个用于展示柱状图的 <div> 容器:

<div id="barChart" style="width: 600px; height: 400px;"></div>

2. 配置垂直柱状图的 option

以下是一个基本的垂直柱状图配置示例:

var barChart = echarts.init(document.getElementById('barChart'));

var barOption = {
    title: {
        text: '销售额比较',
        left: 'center',
        textStyle: {
            color: '#333',
            fontSize: 20
        }
    },
    tooltip: {
        trigger: 'item'
    },
    legend: {
        data: ['产品A', '产品B'],
        top: '10%'
    },
    xAxis: {
        type: 'category',
        data: ['1月', '2月', '3月', '4月', '5月'],
        axisLabel: {
            textStyle: {
                color: '#666',
                fontSize: 14
            }
        }
    },
    yAxis: {
        type: 'value',
        axisLabel: {
            formatter: '{value} 元',
            textStyle: {
                color: '#666',
                fontSize: 14
            }
        }
    },
    series: [
        {
            name: '产品A',
            type: 'bar',
            data: [1200, 1500, 2000, 2500, 3000],
            itemStyle: {
                color: '#FF5733'
            }
        },
        {
            name: '产品B',
            type: 'bar',
            data: [800, 1000, 1500, 2000, 2500],
            itemStyle: {
                color: '#3398DB'
            }
        }
    ]
};

barChart.setOption(barOption);

3. 完整的 HTML 代码示例

以下是完整的 HTML 文件代码,包含基本柱状图的创建和渲染:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ECharts 柱状图示例</title>
    <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>
</head>
<body>
    <h1>使用 ECharts 绘制柱状图</h1>
    <div id="barChart" style="width: 600px; height: 400px;"></div>

    <script>
        var barChart = echarts.init(document.getElementById('barChart'));

        var barOption = {
            title: {
                text: '销售额比较',
                left: 'center',
                textStyle: {
                    color: '#333',
                    fontSize: 20
                }
            },
            tooltip: {
                trigger: 'item'
            },
            legend: {
                data: ['产品A', '产品B'],
                top: '10%'
            },
            xAxis: {
                type: 'category',
                data: ['1月', '2月', '3月', '4月', '5月'],
                axisLabel: {
                    textStyle: {
                        color: '#666',
                        fontSize: 14
                    }
                }
            },
            yAxis: {
                type: 'value',
                axisLabel: {
                    formatter: '{value} 元',
                    textStyle: {
                        color: '#666',
                        fontSize: 14
                    }
                }
            },
            series: [
                {
                    name: '产品A',
                    type: 'bar',
                    data: [1200, 1500, 2000, 2500, 3000],
                    itemStyle: {
                        color: '#FF5733'
                    }
                },
                {
                    name: '产品B',
                    type: 'bar',
                    data: [800, 1000, 1500, 2000, 2500],
                    itemStyle: {
                        color: '#3398DB'
                    }
                }
            ]
        };

        barChart.setOption(barOption);
    </script>
</body>
</html>

四、创建水平柱状图

水平柱状图适用于数据项较多的情况,可以通过将 type 设置为 bar 来实现。

1. 配置水平柱状图的 option

以下是一个水平柱状图的配置示例:

var horizontalBarChart = echarts.init(document.getElementById('horizontalBarChart'));

var horizontalBarOption = {
    title: {
        text: '销售额比较(水平)',
        left: 'center',
        textStyle: {
            color: '#333',
            fontSize: 20
        }
    },
    tooltip: {
        trigger: 'item'
    },
    legend: {
        data: ['产品A', '产品B'],
        top: '10%'
    },
    xAxis: {
        type: 'value',
        axisLabel: {
            formatter: '{value} 元',
            textStyle: {
                color: '#666',
                fontSize: 14
            }
        }
    },
    yAxis: {
        type: 'category',
        data: ['1月', '2月', '3月', '4月', '5月'],
        axisLabel: {
            textStyle: {
                color: '#666',
                fontSize: 14
            }
        }
    },
    series: [
        {
            name: '产品A',
            type: 'bar',
            data: [1200, 1500, 2000, 2500, 3000],
            itemStyle: {
                color: '#FF5733'
            }
        },
        {
            name: '产品B',
            type: 'bar',
            data: [800, 1000, 1500, 2000, 2500],
            itemStyle: {
                color: '#3398DB'
            }
        }
    ]
};

horizontalBarChart.setOption(horizontalBarOption);

2. 完整的水平柱状图 HTML 示例

<div id="horizontalBarChart" style="width: 600px; height: 400px;"></div>

<script>
    var horizontalBarChart = echarts.init(document.getElementById('horizontalBarChart'));

    var horizontalBarOption = {
        title: {
            text: '销售额比较(水平)',
            left: 'center',
            textStyle: {
                color: '#333',
                fontSize: 20
            }
        },
        tooltip: {
            trigger: 'item'
        },
        legend: {
            data: ['产品A', '产品B'],
            top: '10%'
        },
        xAxis: {
            type: 'value',
            axisLabel: {
                formatter: '{value} 元',
                textStyle: {
                    color: '#666',
                    fontSize: 14
                }
            }
        },
        yAxis: {
            type: 'category',
            data: ['1月', '2月', '3月', '4月', '5月'],
            axisLabel: {
                textStyle: {
                    color: '#666',
                    fontSize: 14
                }
            }
        },
        series: [
            {
                name: '产品A',
                type: 'bar',
                data: [1200, 1500, 2000, 2500, 3000],
                itemStyle: {
                    color: '#FF5733'
                }
            },
            {
                name: '产品B',
                type: 'bar',
                data: [800, 1000, 1500, 2000, 2500],
                itemStyle: {
                    color: '#3398DB'
                }
            }
        ]
    };

    horizontalBarChart.setOption(horizontalBarOption);
</script>

五、堆叠柱状图

堆叠柱状图用于展示各类的组成部分,便于比较整体和部分。通过设置 stack 属性,可以实现堆叠效果。

1. 配置堆叠柱状图的 option

var stackBarChart = echarts.init(document.getElementById('stackBarChart'));

var stackBarOption = {
    title: {
        text: '堆叠柱状图示例',
        left: 'center',
        textStyle: {
            color: '#333',
            fontSize: 20
        }
    },
    tooltip: {
        trigger: 'item'
    },
    legend: {
        data: ['产品A', '产品B'],
        top: '10%'
    },
    xAxis: {
        type: 'category',
        data: ['1月', '2月', '3月', '4月', '5月'],
        axisLabel: {
            textStyle: {
                color: '#666',
                fontSize: 14
            }
        }
    },
    yAxis: {
        type: 'value',
        axisLabel: {
            formatter: '{value} 元',
            textStyle: {
                color: '#666',
                fontSize: 14
            }
        }
    },
    series: [
        {
            name: '产品A',
            type: 'bar',
            stack: '总量',
            data: [1200, 1500, 2000, 2500, 3000],
            itemStyle: {
                color: '#FF5733'
            }
        },
        {
            name: '产品B',
            type: 'bar',
            stack: '总量',
            data: [800, 1000, 1500, 2000, 2500],
            itemStyle: {
                color: '#3398DB'
            }
        }
    ]
};

stackBarChart.setOption(stackBarOption);

2. 完整的堆叠柱状图 HTML 示例

<div id="stackBarChart" style="width: 600px; height: 400px;"></div>

<script>
    var stackBarChart = echarts.init(document.getElementById('stackBarChart'));

    var stackBarOption = {
        title: {
            text: '堆叠柱状图示例',
            left: 'center',
            textStyle: {
                color: '#333',
                fontSize: 20
            }
        },
        tooltip: {
            trigger: 'item'
        },
        legend: {
            data: ['产品A', '产品B'],
            top: '10%'
        },
        xAxis: {
            type: 'category',
            data: ['1月', '2月', '3月', '4月', '5月'],
            axisLabel: {
                textStyle: {
                    color: '#666',
                    fontSize: 14
                }
            }
        },
        yAxis: {
            type: 'value',
            axisLabel: {
                formatter: '{value} 元',
                textStyle: {
                    color: '#666',
                    fontSize: 14
                }
            }
        },
        series: [
            {
                name: '产品A',
                type: 'bar',
                stack: '总量',
                data: [1200, 1500, 2000, 2500, 3000],
                itemStyle: {
                    color: '#FF5733'
                }
            },
            {
                name: '产品B',
                type: 'bar',
                stack: '总量',
                data: [800, 1000, 1500, 2000, 2500],
                itemStyle: {
                    color: '#3398DB'
                }
            }
        ]
    };

    stackBarChart.setOption(stackBarOption);
</script>

六、分组柱状图

分组柱状图用于比较多个系列的不同类别。通过设置 barCategoryGapcategoryGap 属性,可以实现分组效果。

1. 配置分组柱状图的 option

var groupBarChart = echarts.init(document.getElementById('groupBarChart'));

var groupBarOption = {
    title: {
        text: '分组柱状图示例',
        left: 'center',
        textStyle: {
            color: '#333',
            fontSize: 20
        }
    },
    tooltip: {
        trigger: 'item'
    },
    legend: {
        data: ['产品A', '产品B'],
        top: '10%'
    },
    xAxis: {
        type: 'category',
        data: ['1月', '2月', '3月', '4月', '5月'],
        axisLabel: {
            textStyle: {
                color: '#666',
                fontSize: 14
            }
        }
    },
    yAxis: {
        type: 'value',
        axisLabel: {
            formatter: '{value} 元',
            textStyle: {
                color: '#666',
                fontSize: 14
            }
        }
    },
    series: [
        {
            name: '产品A',
            type: 'bar',
            data: [1200, 1500, 2000, 2500, 3000],
            itemStyle: {
                color: '#FF5733'
            }
        },
        {
            name: '产品B',
            type: 'bar',
            data: [800, 1000, 1500, 2000, 2500],
            itemStyle: {
                color: '#3398DB'
            }
        }
    ]
};

groupBarChart.setOption(groupBarOption);

2. 完整的分组柱状图 HTML 示例

<div id="groupBarChart" style="width: 600px; height: 400px;"></div>

<script>
    var groupBarChart = echarts.init(document.getElementById('groupBarChart'));

    var groupBarOption = {
        title: {
            text: '分组柱状图示例',
            left: 'center',
            textStyle: {
                color: '#333',
                fontSize: 20
            }
        },
        tooltip: {
            trigger: 'item'
        },
        legend: {
            data: ['产品A', '产品B'],
            top: '10%'
        },
        xAxis: {
            type: 'category',
            data: ['1月', '2月', '3月', '4月', '5月'],
            axisLabel: {
                textStyle: {
                    color: '#666',
                    fontSize: 14
                }
            }
        },
        yAxis: {
            type: 'value',
            axisLabel: {
                formatter: '{value} 元',
                textStyle: {
                    color: '#666',
                    fontSize: 14
                }
            }
        },
        series: [
            {
                name: '产品A',
                type: 'bar',
                data: [1200, 1500, 2000, 2500, 3000],
                itemStyle: {
                    color: '#FF5733'
                }
            },
            {
                name: '产品B',
                type: 'bar',
                data: [800, 1000, 1500, 2000, 2500],
                itemStyle: {
                    color: '#3398DB'
                }
            }
        ]
    };

    groupBarChart.setOption(groupBarOption);
</script>

七、总结

本文详细介绍了 ECharts 的柱状图,包括垂直柱状图、水平柱状图、堆叠柱状图和分组柱状图的配置方法。通过多个示例,您应该能够掌握柱状图的基本用法及其高级特性。ECharts 的灵活性使得您能够根据需求创建美观且功能强大的数据可视化图表。希望这篇博客能对您的 ECharts 学习之路有所帮助!