アルゴリズム軸スケール値 - y軸スケールechartsから計算ニーズ - 和アレーベース

このリンクします。https://blog.csdn.net/qq_26909801/article/details/96966372
数値計算アルゴリズム軸はスケール
はじめ
アルゴリズムの記述の
上のコード
のコード実行中の効果の
結論
はじめに
データを配置することにより、大きい、と私を作業は、単にデータチャートの一部を描画するために必要とされます。そこに多くの既製の部品を使用することができますが、必要な製品を実現するためには、内部コンポーネントの機能のいくつかに依存してチャート化することは非常に十分ではありません。いくつかの要件が完了するまでに、独自のアルゴリズムを記述するために、法のマスターアセンブリ原理の場合には繊細でなければなりません。たとえば、私たちは、この規模の計算アルゴリズムは、テキストの開始前に、私が遭遇した問題について説明しますと言います。
echarts使い、時には容易ではない独自のスケール・コンピューティングは、例えば、時にはあなたは、4つのセグメントに分割され、わずか5ダニチャートを作りたい、echartsはsplitNumberと呼ばれるパラメータを提供し、4へsplitNumberは4分割チャートを作ってみることデータ変動が大きい場合にセグメントは、しかし、echartsは自動的にデータの場合であっても、ほとんどは、通常の分離手段4スケールすることができ、分割されたセグメントの数を増加させるが、実際のデータ・セグメントの数は、依然として4つの以上のセグメントであってもよい分離の小さい部分です。次のように:

したがって、我々は分割セクションecharts splitNumberの数だけ推定と結論付けています。我々はスケール範囲を強制する必要がある場合は4つのセグメントに分割され、その後、私たちは規模を計算するために、独自のアルゴリズムを記述する必要があります。さらに、偶数段の正確な数は、echartsが自動的に目盛間隔を算出する場合には大きすぎるがあってもよい、目盛間隔ので、次の画像のようなデータの場合には有意差は、あまりにも、サイズに関する各データをもたらすように表示されません、差異が表示されていません。

図スタックのグラフと棒グラフを切り替える際に、さらに、echartsは自動的に他のいくつかの問題があるスケールを計算、例えば、マークのスタックオーバーフローが図起こり得ます。しかし、ここでは、スケール・コンピューティング・スタック図は現在、テキストの先頭以下、明確に話すことはありません。

アルゴリズムを説明
、私はまた、分割されたセグメントの数の問題を解決するためのバージョンを書きましたが、過度の目盛間隔の問題を解決しないの前に規模を計算するアルゴリズムの前に。アルゴリズムが近似される前に、そのバージョンの主なアイデアは、全体の規模を最小おおよその価値の最大値と最小値、ではないが、最適なアルゴリズムを取られたが、概念と調整アルゴリズムの時に私はまた、多くのことを学びました、アルゴリズムのこのバージョンは、私たちの技術の上司の指導の下、オンライン記事やプロジェクトのニーズと組み合わせ、書き出すされ、次のようにして、アルゴリズムは次のとおりです。

要件:一連の数値の最大値、最小スケール値は、最大規模のマキシ、小型、および最小目盛間隔間隔を決定するために、決定されます。データが必要な正と負の対称スケールの両側に存在するか否かの異なる選択の数は、分割線がスケールで0でなければならない請求項を卒業するとき、ステージの数は、エラーが存在するかどうかを選択することができたときに異なるデータの数。

;配列と魔法splitNumber魔法= [10,15,20,25,30,40,50,60,70,80,90,100]の分割されたセグメントの数を決定する
初期を決定する最大値max及びターゲットアレイARRから計算された最小値minを、間隔サイズtempGap =(最大-最小)/ splitNumber;
;ちょうど記録された複数の複数のアレイ間隔[10,100]の魔法で、複数の倍数で割ったメタtempGap
魔法からの配列の最初の数よりもとらtempGapズーム値より大きいエラーの数を、最大と最小隣接スケールマキシとミニを算出可能な場合の分割区間にマジックナンバー、最初の計算のための目盛間隔(Estepの)上のようにマジックナンバー*複数は、その後、間隔= ESTEPを取って、動作を終了します。
スケールは、両側の正と負の対称の存在と反対の符号データを必要ミニ取り込み、より大きな絶対値をマキシ、別に割り当てられた相手番号と、間隔=(マキシミニ)を算出/ splitNumber、 操作の終わり;
場合nは負のスケールは、その後、マジックナンバーを与えるために分割されたセクションの数に完全な又は等しい取るときに動作が終了され、動作のために大規模なマジックナンバーを再採取等しくない場合は分割区間の実際の数が等しいsplitNumberがあるか否かが判定される、対称又は逆の符号データが存在しないである必要はありません 間隔=(マキシミニ)/ splitNumber。
Codeの
完全なフロントエンドをグラフためのアルゴリズムは、ジャバスクリプト言語を記載しました。

/ *
[10、15、20、25、30、40、50、60、70、80、90、100]マジック配列に基づいて計算アルゴリズムをスケール;
説明:アレイの間隔にわたってマジックアレイである、すなわち、我々は各たい目盛間隔を合計する数のアレイの整数倍です。(すなわち、一体と正確10倍)
* /
スケールが小さすぎては意味がので、ここで設定精度を無視しないので//、追加問題JS精度浮動小数点数は、最終結果の計算に一度丸めることができる存在解決するために8
関数fixedNum(NUM){
(( "" + NUM).indexOf()> = 0 '')= NUM parseFloatは(num.toFixed(8))IF;
戻りNUM;
}
.. 1つの//初期化
VAR対称=偽; //負のスケールが必要な場合は対称性。デフォルトでは、時に必要trueに設定し、偽である
VAR偏差= FALSE; //許容誤差か否か、即ち、段階の数は、実際の分離splitNumberのに等しくない
= VARマジック[10、15、20、25、30、40、50、60であります70、80、90、100]; //配列はマジックナンバーが表示されたの到達を回避するために、制限を緩和するためのマジックナンバー、マジックナンバーを拡大してきました。
VAR ARR = [1230、320、 20、304、102、234]; // テストデータ
VaRのMAX、MIN、splitNumber;
splitNumber = 4; //間隔スケール上セグメントの数、セグメントのすなわち数が所望のスケール間隔
最大= Math.max.applyは(NULL、ARR) ; // 最大値を計算する関数を呼び出す有するJS
分= Math.min.apply(ヌル、ARR) ; // 最小値を計算する
。// 2初期の計算tempGap間隔とスケーリング複数
のvar tempGap =(最大-最小)/ splitNumber;最初の目盛間隔の//サイズ。
ちょうどマジックナンバーの範囲でtempGap分割多重を設定// 10は、tempGap 120は、tempGapする場合のように複数の指標のパワーを求めることは、マジックナンバーのアレイにマッピング(即ち、処理は10〜100の間の数です)それは10、すなわち10のパワーの倍数です。
VaRの複数はMath.floor(Math.log10(tempGap = )-1); // Math.log10(tempGap)が-1必要とするとき、両方の正と負の数字は切り捨てられ、Math.floorため本明細書中で使用されます。parseIntが使用されるか、または他のロジックの代わりに、丸められていません。
複数= Math.pow(10倍) ; // だけインデックスが決定され、ここで決定された実際の値が複数あります。2行のコードを分離することは、人々が読ん防ぐために
最初の演算を行うマジック多数の隣接取ら3 @。
VarのtempStep = tempGap /マルチ; //マッピングサイズ間隔の
VaRのESTEPを; //所望の間隔取得
するvar lastIndexの= 1; //無限ループを避ける魔法添字に要した時間を記録
するための(VARのI = 0;私は<magic.lengthを、Iは++){
IF(マジック[I]> tempStep){
ESTEP =マジック[I] *複数 ; //は、 マジック番号が最初tempStepより大きく、削除などの複数の所望の最適な間隔得られた乗算
ブレーク;
}
}
。// 4決定された所望の最大値と最小値スケールのスケール、 ESTEPのの整数倍で
、VaRのマキシ、ミニ
関数countDegree(ESTEP){
//ここでのparseIntが、私は偶然、これは私は、ミニのMath.ceil使用をマキシするMath.floorを使用したいものである、アウト書いたですが。これは、隣接セルに降り、それ以降の場合のparseInt図で描かれたことが判明すると、良く見えることができ
マキシ=のparseInt(最大/ ESTEP + ESTEP * 1); // 正味の効果は、最大/ ESTEPが(-1、に属している場合ということですインフィニティ)の間隔、グリッドを取り上げ、格子または2を取るとき。
ミニ=のparseInt(分/ estep- 1)* ESTEP; //分/ ESTEPグリッド1をダウン取る、(-Infinity、1)間隔が属する時間は、グリッド2別段取ら。
// max及びminはちょうどダニ場合、上記ロジックに従って取り又はれるマルチフレームダウン
する場合(最大=== 0)マキシ= 0; // ここでの補正は、優先度0を取りますスケール
(=== 0分)IFミニ= 0;
IF(対称&& *ミニマキシ<0){//所望であれば負の対称性と異なるスケール番号データが存在
するvar TM = Math.max(Math.abs(マキシ )、数学.ABS(ミニ)); //大きい絶対値を取得
マキシ= TM。
= -TMミニ;
}
}
countDegree(Estepの);
IFは(偏差){//エラーが許可されている場合、セグメントの即ち実際の数が等しくsplitNumberではないかもしれない、直接終了する
。VAR =間隔fixedNum(Estepの)
はconsole.log(マキシをミニインターバル);
返す;
}
記号// 5と0規模非対称目盛スケールがマジックナンバー//請求ちょうど0規模上記分割線を確認してくださいを取る再計算されません。。。
他のIF(*ミニマキシ対称||> 0!){
outter:DO {
実際のセグメントの//コンピュータシミュレーション
VAR tempSplitNumber恐らくMath.round =((マキシミニ)/ Estepの);
//単調傾向がときに発生します変化を補正する必要がある場合、無限ループが発生する可能性があり
((I-lastIndexの)*場合 (tempSplitNumber-splitNumberが)<0){// セグメントの数とともに変化するため、ここではなく、撮影した単調性をチェック
//ここ補正に基づきますマジックナンバーは、図1及び図2のような合理的に均一なアレイ、すなわち、より小さな差tempSplitNumberとsplitNumberで、常に大規模を取る
(tempSplitNumber <splitNumber){//ポイントを引き継ぐためにESTEPまでミニまたはマキシ増減を行いながらセグメントの数
もし((ミニ分)< =(マキシマックス)&&ミニ!= 0 ||マキシ== 0){// 、前提0規模を維持しようとするように拡張されたスケールに近い最も側の値が
ミニ= ESTEP;
}他{
マキシ+ = ESTEP;
}
tempSplitNumber ++;
IF(tempSplitNumber == splitNumber)
outterを破る;
}
}
//マジックナンバー添字範囲外またはセグメントの数を引き継ぐためにループを抜ける
(I> = magic.length場合-1 || I <= 0 || tempSplitNumber == splitNumber)休憩;
マジックナンバー記録で//はマーク
lastIndexの= Iを;
//は、隣接するマジックナンバーのトレンドに沿って取得しよう
(tempSplitNumber場合> splitNumber)ESTEP =マジック[++ I]複数の*;
他Estepのマジック= [ - I]複数の*;
//再計算規模
countDegree(Estepの);
}しばらく(!= tempSplitNumber splitNumber);
}
... 6 //は関係なく、常に計算マキシセグメントにsplitNumberミニ、間隔間隔を与えます。しかし、アルゴリズムの前に最適なスケールを確実にするために可能な限りされており、それは理想的な間隔スケールESTEPのに近いか等しいです。
マキシ= fixedNum(マキシ)。
ミニ= fixedNum(ミニ)。
VAR間隔= fixedNum((マキシミニ)/ splitNumber)。
console.log(マキシ、ミニ、間隔)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51であり、
52が
ある53
54である
55
56は
57である
58
59
60
61である
62は
63である
64
65
66
67
68
69
70
71れている
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
エフェクト実行コード
しない場合は1を分数誤差の効果処理、及び力が4つのセグメントに分割され、そのような(20190722版)ということです。

2.分数誤差のプロセスをスケール誤差の影響は、この(バージョン20190723)の外である可能

それは見ることができます。

アレイの魔法を使用して計算された新しいアルゴリズムが不十分とみなさ目盛間隔直ちに最大値と最小値に基づいています。
JS浮動小数点精度の問題は、我々は、アルゴリズムの汎用性のいくつかの設計に注意を必要とするデータの大きさが小さく、間隔計算された分の誤差が存在する場合、あなたは、右側の絵を見ることができるということです。
左の写真の精密加工スケールは、データが8進純粋に正確な小数点以下3桁に正確なだけまでの非小数のとき、私は規模を避けるために、ロジックを記述することをであることは長すぎる、echartsこの機能が所有していません。 。
そして、異なる数とデータの存在の効果を添付して、スケールの対称正と負の効果を必要とし

それは見ることができる:
負非対称前記ちょうど0の分割ラインスケール上スケール
Y軸スケールは、実際のアルゴリズムは、独自の、echartsこの機能を提供しない書き込むことである40K 40,000の略です。

結論
久しぶりのブログ、それは最近、ビジー状態である可能性があり、可能な場合は、その後、実際には多くのものがあり、先端は小さなスペースので、このブログの記事を書いて、今日は書くことはできない、と私は、参照して別のアルゴリズムの比較をするアルゴリズムをチェックしています意味は、参照するには皆のためにこっそり書き、だけでなく、自分自身に後で参照を容易にします。私は現在、echartsに関して、改善するために、開発中のプロジェクトに関与していると私は、プロジェクトのほかに、それについての議論を書く機会を持っている必要がありますため、誰もが何かを書くために、ピットの多くを踏ん。
このような点を通過してから行きます。
----------------
免責事項:この記事は元の記事CSDNブロガー「DISASTER - 」であり、BY-SAの著作権契約、複製、元のソースのリンクと、この文を添付してくださいCC 4.0に従ってください。 。
オリジナルリンクします。https://blog.csdn.net/qq_26909801/article/details/96966372

おすすめ

転載: www.cnblogs.com/vicky-li/p/11653415.html