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 のインストールと設定方法のグラフィックチュートリアル

推薦する

フローティングをクリアするいくつかの方法(推奨)

1. 同じタイプの空の要素を追加し、要素の CSS 属性 clear:both; を設定します。 ...

iFrameは背景を覆うポップアップレイヤーとして使うのに最適です

最近、私は「ぶどうコレクション」というプロジェクトに取り組んでいます。簡単に言うと、Budou ペー...

仮想マシンのディスクサイズを拡張する方法

Vmvare が仮想マシンのディスク サイズを設定した後、ディスク領域が不足していることがわかりまし...

MySQLは文字列の連結、インターセプション、置換、位置検索操作を実装しています

MySQL 文字列の連結、インターセプト、置換、および検索位置。よく使用される文字列関数:関数例示す...

Linux で mysql-8.0.20 をインストールするための詳細なチュートリアル

** Linuxにmysql-8.0.20をインストールする**環境の紹介オペレーティングシステム:...

MySQL データベース内の数十億のデータを素早くクリーンアップする方法

今日、ディスクアラーム例外を受け取りました。50G ディスクが爆発しました。分析と解決のプロセスは次...

VMware Workstation のインストール Linux システム

始める段階から初心者になるまで、Linux オペレーティング システムは不可欠です。最初のステップは...

HTML CSS を使用して div またはテーブルを指定した位置に固定する方法

CSSコードコンテンツをクリップボードにコピー.bottomTable{背景色: rgb (249,...

Reactのヒントはフックの依存関係の問題を解消する方法を教えます

reactプロジェクトで非常に一般的なシナリオ: const [watchValue、setWatc...

MySQL でトランザクションのコミットとロールバックを実装する方法の詳細な例

最近、データベース データのスケジュールされた移行を実行する必要があります。実行プロセス中に何らかの...

CSS3 すりガラス効果

すりガラス効果がうまく表現されていれば、ページが非常に鮮やかで立体的に見えるようになります。写真に直...

docker tagとdocker pushの使い方の詳しい説明

Dockerタグの詳しい説明docker tag コマンドの使い方と、ローカルイメージを daocl...

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

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

Unicode の一般的な文字の概要

初期のコンピューターのほとんどは ASCII 文字しか使用できませんでしたが、その後、主要な西洋のア...

Dockerにelasticsearchとkibanaをインストールする方法

Elasticsearchは現在非常に人気があり、多くの企業が利用しているため、esを知らないと軽蔑...