整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          數據可視化:使用對數刻度

          數據可視化:使用對數刻度


          么是對數刻度?

          就是在作圖之前,先對原始數值做對數計算,在畫到坐標軸上。

          簡單回憶下中學學過的對數函數:log2(x), loge(x)和log10(x)



          為什么要使用對數刻度?

          回答這個問題之前,先看看,你有沒有見過這樣的圖:

          很多數據點,都集中在較小值那一端,看也看不清;而另一端較大數值,卻數據點很少、顯得很空曠。


          原因就是這些數據的分布不均,不在一個數量級。或者說,如果把數值從小到大排序,會發現他們不是等距離的逐漸增加(比如1, 2, 3, ….;等差數列),而是成倍數的增長(比如1, 10, 100, 1000 …;等比數列)


          這個時候,使用對數刻度的優點就呈現出來了。

          1) 數量級相差太大的數值,也可以放在同一個尺度上呈現。

          2) 視覺化上有優勢:視覺上相差的距離,有數據意義,代表了相差了多少倍。


          現在以[1, 3.16, 10, 31.6, 100]這幾個數為例說明這兩個優點。


          [1, 3.16, 10, 31.6, 100]示例

          對數刻度優點:

          1) 數量級相差太大的數值,也可以放在同一個尺度上呈現。


          比如,對數化之前,這幾個數值呈現效果如下:

          大部分都集中在左側一段。



          對數化之后(以10為底數,即log10(x)),就可以在圖形上均勻分布了。

          對數刻度優點:

          2) 視覺化上有優勢:視覺上相差的距離,有數據意義,代表了相差了多少倍。


          在對數刻度的坐標軸上的任意兩個點,距離相差多少,就代表這兩個值相差多少。這樣處理后的數字化呈現,便于理解。

          比如下圖的1)和2),都代表差了3.16倍;

          而下圖的3)相差了這個長度的任何兩個點都代表相差3.16倍


          注意對數刻度坐標軸的正確標注方法。一般有兩種:

          方法1)直接標真實值,

          或者方法2)標記x,然后軸名稱加上公式log10(x)。比如下圖:


          最好使用方法1)。否則數據點代表的真實值是多少,還需要花時間理解、計算。


          參考:https://serialmentor.com/dataviz/coordinate-systems-axes.html


          真實案例

          現在再看一個真實案例:

          2007年,各個國家人均GDP(x軸)和壽命(y軸)的關系。


          數據點未經處理,直接作圖為:

          Python plotly作圖

          因為壽命相差比較平均,但是每個國家GDP則相差較大(最高最低差了兩個數量級),可以考慮對數處理。

          下圖是log10(GPD)后的數據呈現:

          處理后的x坐標軸,標記的是其真實值。刻度線分別代表了:300,400,500, …. 1000, 2000, 3000, 4000, 5000, … 10k, 20k, 30k, … 60k…

          不出所料,400/300=1.33,500/400=1.25… 所以被標記的刻度線,距離變小,從稀疏逐漸變密集。


          活學活用

          對數刻度可以用在數據量呈倍數增長的情況下。

          聰明的讀者,一定想到了最近的疫情擴散情況,極其符合對數刻度作圖。

          這里借用了《金融時報》數據化專家John Burn-Murdoch的圖表。對數化處理后,可以從每個國家的曲線是否還在上升,判斷感染速率是否下降,也就是是否出現了疫情拐點。

          轉載:https://www.shangyexinzhi.com/article/1619223.html


          作圖工具:Python Plotly

          T之家12月9日消息 微軟對Chromium開源項目非常感興趣,因為該項目對Edge和Chrome都有利。微軟最新的功能請求之一就是希望通過部署Edge HTML風格的滾動特性從而讓Chromium的滾動變得更加靈敏。

          微軟打算將Impulse樣式(即EdgeHTML樣式)滾動動畫加入到Chromium中,微軟已經將該滾動動畫移植到了基于Chromium的Edge瀏覽器的Dev Canary通道中。默認情況下,Edge瀏覽器中啟用了脈沖樣式的滾動動畫。對于Chrome,該功能可能會在未來幾天內出現在試驗版瀏覽器中。

          微軟表示,Impulse-style (也就是EdgeHTML-style)滾動動畫將提供更靈敏的滾動體驗,用戶啟用后鼠標滾輪的每個刻度都試圖模仿基于物理的內容,內容會開始快速移動然后逐漸變慢。換句話說,由于開始時的快速加速,該模式會給人一種更靈敏的感覺。

          此外微軟還在推行另一項稱之為“percent-based scrolling”(基于百分比的滾動)的滾動方案,該模式允許瀏覽器將鼠標滾輪或者鍵盤滾動解釋為預期滾動條的百分比。微軟目前正努力將經典版Edge瀏覽器的優秀特性移植到Chromium平臺上,包括這項基于百分比的滾動方式。

          :最近在學習CSS3,看到了一個小案例,通過自己的學習,動手實現了它,現在把它分享出來。

          鐘表效果

          實現過程

          1.首先我們需要在頁面中寫出一個靜態的鐘表效果。首先我們需要一個表盤div wrap 對其進行簡單的樣式設置,用border-radius屬性將其設置成圓形。


          <div id="wrap"></div>
           #wrap{width:200px; height:200px; border:2px solid #000; margin:100px auto;border-radius:50%; position:relative;}

          2.接下來我們用ul和li來寫表盤中的刻度,對其進行簡單的樣式設置。其中需要注意的是,我們用 -webkit-transform-origin:center 100px;來設置我們的旋轉基點。然后利用 -webkit-transform: rotate(0);讓我們的li旋轉相應的角度形成相應的刻度。

           <ul id="list">
           <li></li> <!--刻度-->
           <li></li>
           <li></li>
           <li></li>
           <li></li>
           <li></li>
           <li></li>
           <li></li>
           </ul> #wrap ul{margin:0; padding:0; height:200px; position:relative; list-style:none;} #wrap ul li{width:2px; height:6px; background:#000; position:absolute; left:99px; top: 0;-webkit-transform-origin:center 100px;} #wrap ul li:nth-of-type(1){-webkit-transform: rotate(0);} #wrap ul li:nth-of-type(2){-webkit-transform: rotate(6deg);} #wrap ul li:nth-of-type(3){-webkit-transform: rotate(12deg);} 
           #wrap ul li:nth-of-type(4){-webkit-transform: rotate(18deg);} #wrap ul li:nth-of-type(5){-webkit-transform: rotate(24deg);} #wrap ul li:nth-of-type(6){-webkit-transform: rotate(30deg);} #wrap ul li:nth-of-type(7){-webkit-transform: rotate(36deg);} #wrap ul li:nth-of-type(8){-webkit-transform: rotate(42deg);} #wrap ul li:nth-of-type(5n+1){ height:12px;}

          3.其中我們設計到了css3的選擇器nth-of-type() ,它規定其屬于其父元素的第幾個li元素。

          當然,我們不可能將表盤的刻度都統統去設置li的樣式去完成。我們后面需要用js去渲染它。

          在渲染之前,我們需要去寫上我們的秒針、分針、時針。分別是div hour、min、sec,并且我們對其進行樣式的設置。為了美化一下,我們再寫一個div icon,圓點。并對其進行簡單樣式設置。

           <div id="hour"></div>
           <div id="min"></div>
           <div id="sec"></div>
           <div class="icon"></div>
           #hour{width:6px; height:45px; background:#000; position:absolute; left:97px; top:55px;-webkit-transform-origin:bottom ;}
           #min{width:4px; height:65px; background:#999; position:absolute; left:98px; top:35px;-webkit-transform-origin:bottom ;}
           #sec{width:2px; height:80px; background:red; position:absolute; left:99px; top:20px;-webkit-transform-origin:bottom ;}
           .icon{width:20px; height:20px; background:#000; border-radius:50%; position:absolute; left:90px; top: 90px;}

          4.接下來我們來寫一下讓鐘表動起來的JavaScript,首先用js去獲取各個div。

           var oList=document.getElementById("list");//獲取到刻度
           var oCss=document.getElementById("css"); var oHour=document.getElementById("hour");//獲取時針
           var oMin=document.getElementById("min");//獲取分針
           var oSec=document.getElementById("sec");//獲取秒針
           var oLi=""; var sCss="";

          5.接下來去渲染表盤的刻度。

           for (var i=0;i<60;i++) { //一個表盤總共是60個刻度
           sCss+="#wrap ul li:nth-of-type("+(i+1)+"){-webkit-transform: rotate("+i*6+"deg);}";
           oLi+="<li></li>";
           };
           oList.innerHTML=oLi;
           oCss.innerHTML+=sCss;//表盤刻度渲染完成

          6.接下來我們去寫一個鐘表表針根據時間變動的函數,先利用new Date()獲取時間,然后通過去改變表針的樣式去讓表針根據時間去轉動,秒針一秒相當于旋轉6度,分鐘一秒相當轉動6度,時針轉動1秒相當于轉動30度。

          function toTime(){ var oDate=new Date();//獲取當前時間
           var iSec=oDate.getSeconds();//獲取當前秒
           var iMin=oDate.getMinutes()+iSec/60;//獲取當前分
           var iHour=oDate.getHours()+iMin/60;//獲取當前時
           oSec.style.WebkitTransform="rotate("+iSec*6+"deg)";//秒針轉動角度1秒6度 (表盤一圈360度一圈60秒所以一秒6度)
           oMin.style.WebkitTransform="rotate("+iMin*6+"deg)";//分鐘轉動角度1分6度 (表盤一圈360度一圈60分所以一分6度)
           oHour.style.WebkitTransform="rotate("+iHour*30+"deg)";//時針轉動角度一小時30度(表盤一圈360度一圈12小時所以一小時30度)
           };

          7.最后我們來開一個定時器,讓函數隔一秒執行一次。

           toTime();
           setInterval(toTime,1000);

          至此一個鐘表效果就寫完了,下面是全部源代碼

          效果源碼


          主站蜘蛛池模板: 国产一区二区内射最近更新| 国产精品毛片一区二区三区| 在线视频国产一区| 国产精品制服丝袜一区| 久久久久人妻一区精品色| 91精品一区二区| 精品国产a∨无码一区二区三区 | 无码av免费一区二区三区试看| 寂寞一区在线观看| 韩国美女vip福利一区| 国模大胆一区二区三区| 国产在线一区二区视频| 夜色阁亚洲一区二区三区| 国产亚洲一区二区手机在线观看| 精品一区二区三区在线成人| 久久精品无码一区二区三区免费| 日本精品少妇一区二区三区| 中文字幕一区二区人妻性色| 亚洲熟妇av一区二区三区下载| 日韩美女视频一区| 久久精品中文字幕一区| 乱码精品一区二区三区| 国产色欲AV一区二区三区| 狠狠综合久久AV一区二区三区 | 亚洲AV无码一区二区三区在线| 天天视频一区二区三区| 久久久久人妻精品一区二区三区| 国产精品免费综合一区视频| 少妇激情av一区二区| 一区二区三区日本电影| 天天躁日日躁狠狠躁一区| 亚洲国产精品一区二区久| 成人日韩熟女高清视频一区| 免费无码一区二区| 国产一区二区三区小向美奈子| 无码一区二区三区在线观看| 国产精品主播一区二区| 日韩精品一区二三区中文 | 久久久国产精品一区二区18禁| 天码av无码一区二区三区四区| 国产精品无码一区二区在线观 |