04-D3.js坐標(biāo)軸

image.png

坐標(biāo)軸,是可視化圖表中經(jīng)常出現(xiàn)的一種圖形承二,由一些列線段和刻度組成。坐標(biāo)軸在 SVG 中是沒有現(xiàn)成的圖形元素的纲爸,需要用其他的元素組合構(gòu)成亥鸠。D3 提供了坐標(biāo)軸的組件,如此在 SVG 畫布中繪制坐標(biāo)軸變得像添加一個普通元素一樣簡單缩焦。

坐標(biāo)軸的構(gòu)成

坐標(biāo)軸在可視化圖形中是很重要的一部分读虏,很多圖表的展示都需要使用坐標(biāo)軸,例如:柱形圖袁滥、折線圖盖桥。

SVG 畫布的預(yù)定義元素里,有六種基本圖形:

  • 矩形
  • 圓形
  • 橢圓
  • 線段
  • 折線
  • 多邊形

還有一種比較特殊的存在题翻,也是最強(qiáng)的元素:

  • 路徑

所以說揩徊,在D3種是沒有現(xiàn)成的坐標(biāo)軸組件的,需要我們使用別的方式使用坐標(biāo)軸嵌赠。

<g>
<!-- 第一個刻度 -->
<g>
<line></line>   <!-- 第一個刻度的直線 -->
<text></text>   <!-- 第一個刻度的文字 -->
</g>
<!-- 第二個刻度 -->
<g>
<line></line>   <!-- 第二個刻度的直線 -->
<text></text>   <!-- 第二個刻度的文字 -->
</g> 
...
<!-- 坐標(biāo)軸的軸線 -->
<path></path>
</g>

分組元素 塑荒,是 SVG 畫布中的元素,意思是 group姜挺。此元素是將其他元素進(jìn)行組合的容器齿税,在這里是用于將坐標(biāo)軸的其他元素分組存放。

如果需要手動添加這些元素就太麻煩了炊豪,為此凌箕,D3 提供了一個組件:d3.axisBottom(xScale)。它為我們完成了以上工作词渤。

使用坐標(biāo)軸

  • 定義坐標(biāo)軸

坐標(biāo)軸通常需要和比例尺一起使用:

// 為坐標(biāo)軸定義一個線性比例尺
var xScale = d3.scaleLinear()
    .domain([0, d3.max(dataset)])
    .range([0, 250]);
// 定義一個坐標(biāo)軸
var axis = d3.axisBottom(xScale) //定義一個axis牵舱,由bottom可知,是朝下的
    .ticks(7); //設(shè)置刻度數(shù)目
  • 定義坐標(biāo)軸相關(guān)的函數(shù):

3.svgAxis():D3 中坐標(biāo)軸的組件缺虐,能夠在 SVG 中生成組成坐標(biāo)軸的元素芜壁。

axisBottom:中的Bottom|Top|Left|Right為坐標(biāo)軸的方向。

scale():指定比例尺高氮。

ticks():指定刻度的數(shù)量慧妄。

  • 添加坐標(biāo)軸

上面我們定義好了坐標(biāo)軸,接下來就是將其添加到畫布中去剪芍。call()的參數(shù)是一個函數(shù)腰涧,其參數(shù)是前面定義的坐標(biāo)軸 axis。

svg.append("g").call(axis);
設(shè)定坐標(biāo)軸的樣式和位置

默認(rèn)的坐標(biāo)軸樣式不太美觀紊浩,下面提供一個常見的樣式:

.axis path,
.axis line{
    fill: none;
    stroke: black;
    shape-rendering: crispEdges;
}

.axis text {
    font-family: sans-serif;
    font-size: 11px;
}

分別定義了類 axis 下的 path、line、text 元素的樣式坊谁。接下來费彼,只需要將坐標(biāo)軸的類設(shè)定為 axis 即可。
坐標(biāo)軸的位置口芍,可以通過 transform 屬性來設(shè)定箍铲。
通常在添加元素的時候就一并設(shè)定,寫成如下形式:

svg.append("g")
  .attr("class","axis")
  .attr("transform","translate(20,130)")
  .call(axis)
  • 在比例尺的基礎(chǔ)上添加坐標(biāo)軸
.axis path,
.axis line {
    fill: none;
    stroke: black;
    shape-rendering: crispEdges;
}

.axis text {
    font-family: sans-serif;
    font-size: 14px;
}
<div id="test-svg">
</div>
var svg = d3.select("#test-svg")
    .append('svg')

var dataset = [2.5, 2.1, 1.7, 1.3, 0.9];

var linear = d3.scaleLinear()
    .domain([0, d3.max(dataset)])
    .range([0, 250]);
var rectHeight = 25;

svg.selectAll("rect")
    .data(dataset)
    .enter()
    .append("rect")
    .attr("x", 20)
    .attr("y", function (d, i) {
        return i * rectHeight;
    })
    .attr("width", function (d) {
        return linear(d);   //在這里用比例尺
    })
    .attr("height", rectHeight - 2)
    .attr("fill", function (d, i) {
        return '#' + Math.random().toString(16).substr(-6);
    });

// 在比例尺的基礎(chǔ)上鬓椭,添加坐標(biāo)軸
var linear = d3.scaleLinear()
    .domain([0, d3.max(dataset)])
    .range([0, 250]);
// 定義一個坐標(biāo)軸
var axis = d3.axisBottom(linear) //定義一個axis颠猴,由bottom可知,是朝下的
    .ticks(7); //設(shè)置刻度數(shù)目

svg.append("g")
    .attr("class", "axis")
    .attr("transform", "translate(20,130)")
    .call(axis)
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末小染,一起剝皮案震驚了整個濱河市翘瓮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌裤翩,老刑警劉巖资盅,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異踊赠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門值纱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寂呛,“玉大人,你說我怎么就攤上這事伦籍±渡梗” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵鸽斟,是天一觀的道長拔创。 經(jīng)常有香客問我,道長富蓄,這世上最難降的妖魔是什么剩燥? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮立倍,結(jié)果婚禮上灭红,老公的妹妹穿的比我還像新娘。我一直安慰自己口注,他們只是感情好变擒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寝志,像睡著了一般娇斑。 火紅的嫁衣襯著肌膚如雪策添。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天毫缆,我揣著相機(jī)與錄音唯竹,去河邊找鬼。 笑死苦丁,一個胖子當(dāng)著我的面吹牛浸颓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播旺拉,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼产上,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蛾狗?” 一聲冷哼從身側(cè)響起晋涣,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎淘太,沒想到半個月后姻僧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蒲牧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年撇贺,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冰抢。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡松嘶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出挎扰,到底是詐尸還是另有隱情翠订,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布遵倦,位于F島的核電站尽超,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏梧躺。R本人自食惡果不足惜似谁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望掠哥。 院中可真熱鬧巩踏,春花似錦、人聲如沸续搀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽禁舷。三九已至彪杉,卻和暖如春毅往,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背在讶。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工煞抬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人构哺。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像战坤,于是被迫代替她去往敵國和親曙强。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • D3.js庫-7-添加坐標(biāo)軸 坐標(biāo)軸是可視化圖表中經(jīng)常出現(xiàn)的一種圖形途茫,由一些刻度和線列段組成碟嘴。D3中是沒有現(xiàn)成的坐...
    皮皮大閱讀 272評論 0 1
  • 這里講一下怎么樣用d3.js,輸入一個數(shù)據(jù)list囊卜,根據(jù)數(shù)據(jù)畫一個帶有坐標(biāo)軸的簡單直方圖.以下是目標(biāo)效果. 直方圖...
    Kaidi_G閱讀 4,822評論 1 3
  • 先貼個總的中文文檔娜扇,然后是坐標(biāo)軸d3-axis文檔,安裝什么的就跳過了栅组。 一雀瓢、簡介 d3的坐標(biāo)軸由 、 玉掸、<tex...
    我才是大田田閱讀 3,209評論 0 0
  • D3.js 為什么學(xué)習(xí)D3 D3.js和threejs的應(yīng)用場景完全不一樣刃麸。threejs主要應(yīng)用與基于webGL...
    強(qiáng)某某閱讀 13,634評論 0 15
  • 近期在做線路圖實時刷新的功能,用到的技術(shù)主要有d3司浪、svg泊业、websocket。整體思路就是解析線路圖json啊易,使...
    淼一___閱讀 1,065評論 0 1