echarts自定义图表--柱状图-横向

区别于纵向表格

xAxis和yAxis对调

要将label全部固定到最右侧: 隐藏一个柱形 为每个label设置固定的偏移距离 offset: [300 - 80, 0]

在data中加入label的配置 根据现在的值生成距离右侧的偏移

更新方法

javascript 复制代码
chart.setOption({
     series: [
          {},
          {
              data: data.map(v => ({
                  value: offset,
                  label: {
                      show: true,
                      position: "right",
                      color: "#00D753",
                      fontWeight: "bold",
                      fontSize: fontSize,
                      formatter: `${v}`,
                      fontFamily: "MyCustomFont",
                      fontStyle: "italic",
                      distance: 0,
                      offset: [300 - 80, 0],
                  },
              })),
          },
          {
              data,
          },
      ],
  })
javascript 复制代码
 data: data.map(v => ({
       value: offset,
        label: {
            show: true,
            position: "right",
            color: "#00D753",
            fontWeight: "bold",
            fontSize: fontSize,
            formatter: `${v}`,
            fontFamily: "MyCustomFont",
            fontStyle: "italic",
            distance: 0,
            offset: [300 - 80, 0],
        },
    })),
javascript 复制代码
<!DOCTYPE html>
<html style="height: 100%; background: #000">
    <head>
        <meta charset="utf-8" />
        <title>发光柱状图</title>
        <script src="https://cdn.jsdelivr.net/npm/echarts@5"></script>
        <style>
            /* 在 CSS 文件中定义自定义字体 */
            @font-face {
                font-family: "MyCustomFont"; /* 自定义字体名称 */
                src: url("public/只含数字.ttf");
                font-weight: normal;
                font-style: normal;
            }
        </style>
    </head>
    <body
        style="background: #000; height: 100vh; overflow: hidden; padding: 200px">
        <div
            id="main"
            style="height: 200px; width: 300px"></div>
        <script>
            const chart = echarts.init(document.getElementById("main"));

            const data = [38, 10, 40, 54, 35, 20, 41];
            const categories = ["A", "B", "C", "D", "E", "F", "G"];
            const redBarOffset = 2;
            // 最大值为100时 如下 增加 下方空隙 + 上方label
            const maxBarValue = 100 + redBarOffset + 10;

            const fontSize = 12;

            const option = {
                backgroundColor: "transparent",
                yAxis: {
                    type: "category",
                    data: categories,
                    axisLine: { lineStyle: { color: "transparent" } },
                    axisLabel: {
                        color: "#666",
                        fontSize: fontSize,
                    },
                },
                xAxis: {
                    show: false,
                    max: maxBarValue + redBarOffset + 10,
                },
                grid: {
                    left: "12%",
                    right: "5%",
                    bottom: "5%",
                    top: "5%",
                },
                series: [
                    // 金色背景柱
                    {
                        type: "bar",
                        data: Array(data.length).fill(maxBarValue),
                        barWidth: "60%",
                        itemStyle: {
                            color: "#453B4C22",
                            borderColor: "#453B4C",
                            borderWidth: 1,
                        },
                        z: 1,
                    },
                    // 占位透明柱(用于悬空红柱)
                    {
                        type: "bar",
                        data: data.map(v => ({
                            value: redBarOffset,
                            label: {
                                show: true,
                                position: "right",
                                color: "#00D753",
                                fontWeight: "bold",
                                fontSize: fontSize,
                                formatter: `${v}`,
                                fontFamily: "MyCustomFont",
                                fontStyle: "italic",
                                distance: 0,
                                offset: [300 - 80, 0],
                            },
                        })),
                        stack: "data",
                        barWidth: "30%",
                        itemStyle: {
                            color: "transparent",
                        },

                        z: 2,
                    },
                    // 红色柱子(真实数据)
                    {
                        type: "bar",
                        animationDuration: 1500,
                        animationEasing: "elasticOut",
                        data: data,
                        stack: "data",
                        barGap: "-75%",
                        itemStyle: {
                            color: "#F7225D",
                            shadowColor: "#F7225D",
                            shadowBlur: 10,
                            borderRadius: [2, 2, 2, 2],
                        },

                        z: 3,
                    }
                ],
            };

            chart.setOption(option);
        </script>
    </body>
</html>
相关推荐
IT_陈寒3 小时前
Java中equals方法比了个寂寞?原来这才是正确的重写姿势
前端·人工智能·后端
默_笙3 小时前
🚓 分诊台与拆题术:让 RAG 学会判断和规划
前端·javascript
CopyCode3 小时前
用 AI 迁项目有多爽?我把 Webpack 迁 Vite 的全过程记下来了
前端·架构
去伪存真3 小时前
Electron 自动化发布指南:GitHub Actions 跨平台打包全纪录
前端·electron
计算机魔术师3 小时前
OpenAI智能体失控闯进美国政府网站,53张用户图片外泄背后
前端
颜进强3 小时前
14 · NestJS ExecutionContext 执行上下文:守卫、拦截器、过滤器拿到的"同一个 context",为什么能力不一样?
前端·后端·ai编程
程序员Flycan3 小时前
🚀 跨域终结者:前端代理服务器(Proxy)原理解析与配置总结
前端
怕浪猫3 小时前
顶级模型一句话,AI 写出了能玩的 QQ飞车
前端·面试·github
huakoh3 小时前
MCP 报错分不清?先看响应里是 result 还是 error
前端
呃呃呃呃ex3 小时前
10. 现代前端工程化:ES6 React 项目实战与原理解析
前端·javascript