首先還是先看看資料上的邏輯。上圖是乙個資料格式,placelist包括每乙個關鍵點的名稱和座標位置,而在風格中主要有name,可以設定為強中弱三種,分別對應markpoint圖中白藍綠三種效果,型別是中國地圖,而具體的風格在儲存在markpoint欄位中。我們在看看markpoint欄位裡面是什麼內容。
如上就是markpoint裡面的主要內容,這裡,每乙個點是乙個鑽石(diamond)的樣式,符號大小,還有乙個effect的屬性,這就是它的動畫風格,而data則用來載入placelist的資訊。
綜上所述,對於使用者而言,指定好要顯示markpoint的位置,也就是placelist,然後在賦予它們的具體效果,中國範圍,強弱型別以及具體的形狀(鑽石,矩形或圓形等),這樣就可以得到markpoint這樣的閃爍效果。
如上,只是指定了blur為true,則實現了平滑效果,簡單不?其實這用了乙個雙快取的技術,在zrender中有乙個layer物件,每一幀都會疊加上一幀的效果,並儲存。具體的實現可以參閱zrender的layer類,比較簡單。
閃爍動畫有點複雜,首先,怎麼控制乙個markpoint從大到小的這樣乙個線性變換的過程,動畫類是如何控制的,另外對於不同的markpoint,有這麼多點,同一幀下每個點對應的風格也不盡相同,這又是如何控制的。
首先,這要介紹一下zrender中的animation類,乙個非常好用強大的類,先看看使用**,如下:
首先,這是乙個when.js風格的使用方式,該動畫主要用來控制effectshape的『style』屬性,即每一幀來對style屬性進行更新。那更新什麼內容呢?這就是clip物件了。
這裡有四個when,再加上最上面的隨機的初始大小,也就是說乙個週期有5個控制點,其中clip1 = 100,而clip2 = 0,,這裡對應的是該控制點對應markpoint的size的百分比。也就是在這個週期中,按照如下的插值演算法來控制該點的size。不知道說清楚了沒有,可以自己除錯一下**看看。
這是在一幀下插值計算當前size的百分比,這裡採用的線性插值,還有其他多種演算法可以選擇,這裡是size,所以用的最簡單的線性插值,你也可以實現軌跡,或者加速度等不同的公式來實現對應的效果。
插值計算完了,付給對應的style中randommap+i屬性上。這裡,一共常見了20個animation類,這樣就會有20個動畫效果,來實現頻率各自不同的閃爍效果。最後會呼叫zrender的refresh,最終來到symbol的渲染階段。這裡,每乙個點根據自己的索引選擇對應的縮放比例percent,然後進入下面的繪製階段。
另外,在對每乙個點的渲染函式中,進行了進一步的優化,**如下,根據大小進行了簡化。
ok,到此,我想到的關於markpoint的內容都已經完畢,另外這個類涉及到乙個大規模點渲染,等有機會對這方面詳細研究後在和大家分享。
資料視覺化之pyecharts
pyecharts乙個讓你變得強大的學習 首先來開始繪製你的第乙個圖表 from pyecharts.charts import bar bar bar bar.add xaxis 可樂 雪碧 礦泉水 咖啡 冰紅茶 涼白開 bar.add yaxis 商家a 5,20,36,10,75,90 ren...
資料視覺化 什麼是資料視覺化
資料對應的英文單詞是data,從資訊獲取的角度看,資料是對目標觀察和記錄的結果,是現實世界中的時間 地點 事件 其他物件或概念的描述。不同學者對資料的作用也給出不同的定義,大致分為以下3類 視覺化對應的兩個英文單詞 visualize和visualization。visualize是動詞,描述 生成...
資料視覺化
資料視覺化主要旨在借助於圖形化手段,清晰有效地傳達與溝通資訊。但是,這並不就意味著資料視覺化就一定因為要實現其功能用途而令人感到枯燥乏味,或者是為了看上去絢麗多彩而顯得極端複雜。為了有效地傳達思想概念,美學形式與功能需要齊頭並進,通過直觀地傳達關鍵的方面與特徵,從而實現對於相當稀疏而又複雜的 資料集...