VueはEchartsを使用して3次元棒グラフを実装します

VueはEchartsを使用して3次元棒グラフを実装します

この記事では、Echartsを使用して3次元棒グラフを実装するVueの具体的なコードを参考までに共有します。具体的な内容は次のとおりです。

プレビュー:

コード:

ページセクション:

<テンプレート>
  <div class="roadnum-all" ref="roadnumall">
    <div id="道路番号" ref="dom"></div>
  </div>
</テンプレート>

CSS部分:

.roadnum-all {
  幅: 100%;
  height: 100%; /*親コンテナを埋める*/
}

JS部分:

import echarts from 'echarts' // Echarts をインポート

エクスポートデフォルト{
  名前: "ltzzt",
  データ() {
    戻る {
      データ: []、
      DOM: ヌル
    }
  },
  マウント() {
    this.$nextTick(() => { // コンテナーを埋めるようにアイコンの幅と高さを指定します document.getElementById('roadnum').style.width = this.$refs.roadnumall.offsetWidth + 'px';
      document.getElementById('roadnum').style.height = this.$refs.roadnumall.offsetHeight + 'px';
      これを描画します。
    })
  },
  メソッド: {
    // 描く() {
      // ネットワークリクエストはバックエンドからデータを取得するふりをする this.data = [
        { 名前: '京哈高速', 値: 10 },
        { 名前: '京哈高速1', 値: 20 },
        { 名前: '京哈高速2', 値: 30 },
        { 名前: '京哈高速3', 値: 40 },
        { 名前: '京哈高速4', 値: 50 },
        { 名前: '京哈高速5', 値: 60 },
        { 名前: '京哈高速6', 値: 70 },
        { 名前: '京哈高速7', 値: 80 },
        { 名前: '京哈高速8', 値: 90 },
        { 名前: '京哈高速9', 値: 100 },
        { 名前: '京哈高速10', 値: 110 },
        { 名前: '京哈高速11'、値: 120 }
      ];
      // 軸表示とデータの配列 let xAxisText = [];
      データリストを [] にします。
      this.data.forEach(item => {
        xAxisText.push(アイテム名);
        dataList.push(アイテム.値)
      })
      // ここからカスタムグラフィックの作成を開始します - 直方体の前面 var MyCubeRect = echarts.graphic.extendShape({
        形:
          x: 0,
          y: 0,
          width: 180, // 直方体の幅 zWidth: 8, // 影の角の幅 zHeight: 4 // 影の角の高さ },
        ビルドパス: 関数 (ctx, シェイプ) {
          console.log(ctx, 形状);
          定数 api = shape.api;
          xAxisPoint を api.coord([shape.xValue, 0]) に設定します。
          定数 p0 = [shape.x, shape.y];
          定数 p1 = [shape.x - shape.width / xAxisText.length, shape.y];
          定数 p4 = [shape.x + shape.width / xAxisText.length, shape.y];
          定数p2 = [xAxisPoint[0] - shape.width / xAxisText.length, xAxisPoint[1]];
          定数p3 = [xAxisPoint[0] + shape.width / xAxisText.length, xAxisPoint[1]];

          ctx.moveTo(p0[0], p0[1]); //0
          ctx.lineTo(p1[0], p1[1]); //1
          ctx.lineTo(p2[0], p2[1]); //2
          ctx.lineTo(p3[0], p3[1]); //3
          ctx.lineTo(p4[0], p4[1]); //4
          ctx.lineTo(p0[0], p0[1]); //0
          ctx.closePath();
        }
      })

      // 2 番目のカスタム シェイプ (直方体の上面と側面) を作成します var MyCubeShadow = echarts.graphic.extendShape({
        形:
          x: 0,
          y: 0,
          幅: 180,
          z幅: 8,
          高さ: 4
        },
        ビルドパス: 関数 (ctx, シェイプ) {
          定数 api = shape.api;
          xAxisPoint を api.coord([shape.xValue, 0]) に設定します。
          定数 p0 = [shape.x, shape.y];
          定数 p1 = [shape.x - shape.width / xAxisText.length, shape.y];
          定数 p4 = [shape.x + shape.width / xAxisText.length, shape.y];
          定数 p6 = [shape.x + shape.width / xAxisText.length + shape.zWidth、shape.y - shape.zHeight];
          定数 p7 = [shape.x - shape.width / xAxisText.length + shape.zWidth、shape.y - shape.zHeight];
          定数p3 = [xAxisPoint[0] + shape.width / xAxisText.length, xAxisPoint[1]];
          定数p5 = [xAxisPoint[0] + shape.width / xAxisText.length + shape.zWidth、xAxisPoint[1] - shape.zHeight];

          ctx.moveTo(p4[0], p4[1]); //4
          ctx.lineTo(p3[0], p3[1]); //3
          ctx.lineTo(p5[0], p5[1]); //5
          ctx.lineTo(p6[0], p6[1]); //6
          ctx.lineTo(p4[0], p4[1]); //4

          ctx.moveTo(p4[0], p4[1]); //4
          ctx.lineTo(p6[0], p6[1]); //6
          ctx.lineTo(p7[0], p7[1]); //7
          ctx.lineTo(p1[0], p1[1]); //1
          ctx.lineTo(p4[0], p4[1]); //4
          ctx.closePath();
        }
      });
      echarts.graphic.registerShape('MyCubeRect', MyCubeRect);
      echarts.graphic.registerShape('MyCubeShadow', MyCubeShadow);
      const オプション = {
        色: ['#33b56a', '#fdcf5c', '#4c90ff', '#fe7b7a', '#69ccf6', '#a38bf8', '#ff9561', '#8cb0ea', '#fe81b4', '#ffb258'],
        タイトル:
          テキスト: 「検証ルートランキング」
          残り: 20,
          トップ: 20
        },
        伝説: {
          表示: true、
          トップ: 25
        },
        グリッド: {
          左: '3%'、
          右: '4%'、
          上: '15%'、
          下: '3%'、
          ラベルを含む: true
        },
        x軸:
          タイプ: 'カテゴリ',
          データ: xAxisText、
          境界ギャップ: true、
          間隔: 0,
          軸ラベル: {
            色: '#333',
            // x軸のテキスト方向の垂直間隔を0にする
            フォーマッタ: 関数 (値) {
              戻り値.split('').join('\n')
            }
          }
        },
        y軸: {
          タイプ: '値'
        },
        ツールチップ: {
          トリガー: '軸'、
          軸ポインタ:
            タイプ: '影'
          },
        },
        シリーズ: [{
          名前: '回数'、
          タイプ: 'カスタム'、
          レンダリングアイテム: (パラメータ、API) => {
            location = api.coord([api.value(0), api.value(1)]); とします。
            戻る {
              タイプ: 'グループ'、
              子供たち: [{
                タイプ: 'MyCubeRect',
                形:
                  アピ、
                  x値: api.value(0)、
                  y値: api.value(1)、
                  x: 場所[0],
                  y: 場所[1]
                },
                style: api.style(), // api.style()——元のスタイルを継承します}, {
                タイプ: 'MyCubeShadow',
                形:
                  アピ、
                  x値: api.value(0)、
                  y値: api.value(1)、
                  x: 場所[0],
                  y: 場所[1]
                },
                スタイル: {
                  塗りつぶし: api.style(),
                  text: '' // 元のスタイルを継承し、ラベルをクリアします。クリアしないと、生成されたグラフに 2 つの重なり合ったラベルが表示されます。
                }
              }]
            }
          },
          スタック: '合計金額'、
          ラベル: {
            表示: true、
            位置: 'トップ'、
            色: '#333',
            フォーマッタ: `{c} 回`、
            フォントサイズ: 16,
            距離: 15
          },
          アイテムスタイル: {
            普通: {
              色: (パラメータ) => {
                // 各列の色を異なるものにする let colorList = ['#33b56a', '#fdcf5c', '#4c90ff', '#fe7b7a', '#69ccf6', '#a38bf8', '#ff9561', '#8cb0ea', '#fe81b4', '#ffb258'];
                (params.dataIndex + 1 <= colorList.length)の場合{
                  colorList[params.dataIndex]を返す
                } それ以外 {
                  // 列数がカラー配列を超える場合は最初からやり直します。return colorList[params.dataIndex - colorList.length]
                }
              }
            }
          },
          データ: データリスト
        }]
      };
      this.dom = echarts.init(this.$refs.dom);
      this.dom.setOption(オプション、true)
      window.addEventListener("サイズ変更", () => {
        document.getElementById('roadnum') の場合、 this.$refs.roadnumall になります。
          document.getElementById('roadnum').removeAttribute('_echarts_instance_');
          document.getElementById('roadnum').style.width = this.$refs.roadnumall.offsetWidth + 'px';
          document.getElementById('roadnum').style.height = this.$refs.roadnumall.offsetHeight + 'px';
          DOM のサイズを変更します。
        }
      });
    }
  }
}

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue+Echartは3次元の縦棒グラフを実現します
  • VueはEchartアイコンプラグインの棒グラフを使用します
  • Echarts を使用して棒グラフを描く vue の詳細な説明
  • Vue+Echart 棒グラフで疫病データ統計を実現
  • Vue echarts は水平棒グラフを実現します
  • Vue+echart で 2 列チャートを実現
  • Vueは水平の斜めの棒グラフを実装します
  • Vue+echarts で積み上げ棒グラフを実現
  • Vue+echarts でプログレスバーのヒストグラムを実現
  • Vue+ Antv F2 は積み上げ棒グラフを実現します

<<:  よく使用される Linux コマンドの完全なリスト (推奨コレクション)

>>:  MySQL 8.0.20 winx64 のインストールと設定方法のグラフィックチュートリアル

推薦する

LinuxにMySQLをインストールし、外部ネットワークアクセスを構成する例

設定手順1. DNSが設定されているかどうかを確認するDNSが設定されていない場合は、前の記事を参照...

ドラッグアンドドロップによる並べ替えの詳細を実現する js

目次1. はじめに2. 実装3. HTML ドラッグ アンド ドロップ API を使用しないのはなぜ...

MySQL カーディナリティ統計の簡単な分析

1. カーディナリティとは何ですか?カーディナリティとは、MySQL テーブルの列内の異なる値の数を...

MySQL 5.7 のルートパスワードログイン問題の解決策

前回の記事でMySQLサービスが起動しない問題が解決したと分かった後、パスワードなしでrootユーザ...

Bootstrapグリッドの垂直および水平配置の詳細な説明

目次1. Bootstrap グリッドレイアウト2. 垂直方向の配置2.1 行タグの垂直方向の配置を...

border-image を使用してテキストバブルの境界線を実装する方法のサンプルコード

開発中に、非常に単純なテキストバブル効果に遭遇しました。これは、おおよそ次のようになります。 うーん...

TypeScript の関数

目次1. 関数の定義1.1 JavaScript の関数1.2 TypeScriptの関数2. オプ...

CSS で波の効果を作成するためのアイデア

以前、純粋な CSS を使用して波の効果を実現する方法をいくつか紹介しました。それらについては、次の...

Yahooのフロントエンド最適化に関する35のルールについての簡単な説明

概要: 仕事でも面接でも、Web フロントエンドのパフォーマンスを最適化することは非常に重要です。で...

MySQL (8 および 5.7) の Docker インストール

この記事では、Dockerを使用してMySQLデータベースとリモートアクセス構成をデプロイする方法を...

親子コンポーネントの通信を解決するための3つのVueスロット

目次序文環境の準備カテゴリコンポーネントアプリのコンポーネント1. デフォルトスロット2. 名前付き...

zabbix を使用して ogg プロセスを監視する (Linux プラットフォーム)

以前作成されたデータベースの ogg プロセスは、発見されるまでの約半月間ダウンしていました。起動で...

JavaScript 文字列オブジェクトメソッド

目次文字列オブジェクトのメソッド方法 1: indexOf() (推奨)方法 2: search()...

MySQL 8.0.12 インストール グラフィック チュートリアル

MySQL8.0.12 インストールチュートリアルをみんなで共有します。 1. インストール1.イン...

Ubuntu 上の Apache で SSL (https 証明書) を設定する正しい方法の詳細な説明

まず、Alibaba Cloud の公式チュートリアルをご覧ください。ファイルの説明: 1. 証明書...