plotly.js 常見圖形使用 常見圖形操作 折線圖 熱力圖 輪廓圖 泡泡圖 圖點擊事件

這篇文章內容來自自己工作中用到的可視化操作,偏向於科學圖表方面。網上資料多且雜,並且有的並不準確,不過如果時間充足,推薦看plotly.js的英文官網,也提供搜索功能,只是需要對圖表很熟悉並且英文要好。本文也是做一個工作的總結和網上資源的整理,把自己工作中遇到的分享出來,讓後用者少走彎路,也當做一份筆記。

我工作中遇到的有:

  1. 折線圖(lines , markers)
  2. 熱力圖(heatmap)
  3. 輪廓圖(contour)
  4. 泡泡圖(scatter)

折線圖

1 指數表示法
照例先上圖片再上代碼:
在這裏插入圖片描述

    getLinesOfEpm:function (eid,data,title) {
            //var title =title||" ";
            var layout = {
                height:400,
                width:550,
                title:title||" ",
                // showlegend:false,
                titlefont:{size:25},
                hovermode:false,
               // hoverinfo:"y",
                yaxis: {
                     exponentformat: "E"//指數表示法
                    ,type:"log"
                    ,side:"left"
                       , range:[-14,0]
                       ,dtick:1
                }
                ,xaxis : {
                dtick:2
                    ,range:[-30,30]
            }

            };

            var  data_line = data;
            Plotly.newPlot(eid, data_line,layout);

        }

其中layout下yaxis下的exponentformat:"E"屬性和type:“log”,就是使用指數表示法,這在科學計算裏很常用。range:[-14,0]指的是從*10^-0
到 *10^-14 次方 ,dtick:1表示座標軸的間隔爲1,表示在y軸上範圍爲-14-0 次,並且 共有14個點,間隔爲1。
2 在座標軸上顯示自定義值

getLinesOfNbtis:function (eid,data,title) {
            //var title =title||" ";
            var layout = {
                height:400,
                width:520,
                title:title||" ",
                // showlegend:false,
                titlefont:{size:25},
                hovermode:false
                ,xaxis:{
                    //顯示的值與實際表示的值
                    tickmode:"array"
                    ,tickvals:[-10,-5,0,5,10,15,20,25]
                    ,ticktext:["dark","Photo","0","100","300","500","3600","7200"]
                    ,range:[-11,26]
                }
                ,yaxis:{
                    range:[-21,11]
                }
            };

            var  data_line = data;
            Plotly.newPlot(eid, data_line,layout);

        }

看xaxis屬性,tickmode,tickvals,ticktext是必須有的,他們是一一對應的。
3 同時顯示點及線
設置mode:“lines+markers”
在這裏插入圖片描述
4 map圖的點擊事件plotly_click無效
map圖平時用的功能官網上的例子就滿足了,根據官網照着拿下來就可以,其中需要注意和填坑的地方是,如果想在map圖上添加點擊事件,需要把layout下hovermode:true設置好,否則寫好的點擊事件,也不會觸發,並且沒有任何提示!
5 map圖及contour圖(輪廓圖) 顏色設置

在這裏插入圖片描述
在這裏插入圖片描述

  var colorscaleValue = [
                [0, 'rgb(248,105,107)'],
                [0.5, 'rgb(255,235,132)'],
                [1,'rgb(99,190,123)']
            ];

這個是excel其中一個顏色的設置,比較常用。設置colorscale這個屬性就可以改變圖的顏色區間。
6 泡泡圖
plotly.js上提供的示例泡泡圖多用於地圖的顯示,依靠地理位置的定位畫泡泡圖,而我工作中需要在普通座標系中根據座標點畫泡泡圖,所以我使用的還是scatter,並不是scattergeo。
如下圖:
在這裏插入圖片描述
這個圖代碼如下:

getPopScatter:function (id,innerData) {
           var arr =  innerData.size;
            var calResult = calVthmedium(arr);
            var vthMean = calResult[0];
            var calMin = calResult[1];
            var vthVariace = 0.5;
            var newArr = transformValue(arr,vthMean,vthVariace,calMin);
            newArr =newArr.map(x=>x==0?x:x+30);
            var maxcolor = Math.max.apply(null,newArr);var mincolor = Math.min.apply(null,newArr);
            var DataText = innerData.text;
            DataText = DataText.map(x=>Number(x));
            for (var  i=0;i<DataText.length;i++){
                if(DataText[i]<-20||DataText[i]>20){
                    DataText[i] = "✖";
                }
            }
   
            var colorscaleValue = [
                [0, 'rgb(248,105,107)'],
                [0.5, 'rgb(255,235,132)'],
                [1,'rgb(99,190,123)']
            ];
            var trace1 = {
                x: innerData.x,
                y: innerData.y,
                mode: 'markers+text',
                type: 'scatter',
                name: innerData.info,
                text: DataText,
                textposition: 'top center',
                textfont: {
                    family:  'Raleway, sans-serif'
                }
                , marker: { size: newArr,color:newArr,cmin:mincolor,cmax:maxcolor }
                ,colorscale:colorscaleValue
            };


            var data = [ trace1 ];

            var layout = {
                xaxis: {
                    dtick:30,
                    range: [-300, 300]
                },
                yaxis: {
                    dtick:30,
                    range: [-300, 300]
                },
                legend: {
                    y: 0.5,
                    yref: 'paper',
                    font: {
                        family: 'Arial, sans-serif',
                        size: 20,
                        color: 'grey',
                    }
                },
                hovermode:"closest"
                ,title:innerData.glassName
            };

            Plotly.newPlot(id, data, layout);
        }

實現思路:根據scatter的marker可以傳遞數組的特性,並且可以設置marker的大小,設置marker的color屬性,達到根據數據顯示不同大小,不同顏色的點位圖。
hovermode這個屬性很有用,如果不主動設置,如果你有2個泡泡點位x軸一樣,比如{0,100},{0,-100}這2個點位,那麼這個hover和click屬性只會根據x的值來定,也就是這2個點會共享一個x=0點位的點擊事件和懸停事件,而且當懸停時,會把經過該x點的2個點的值一起顯示出來,不方便分辨和查看。設置成closest,纔會區分開,這個是需要填坑和注意的地方

xaxis: 多爲x軸上的屬性設置 同樣的有yaxis
有一個
layout: 多爲整體圖表的屬性設置 如他的width屬性:高度,title屬性:圖表標題
https://plot.ly/javascript/ plotly.js官網

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章