D3學習筆記(1)

首先了解下啥是D3

D3.js is a JavaScript library for manipulating documents based on data.

官網上第一句就是這個,也就是個js文件,下下來也不過幾百k,但是聽說可以畫出各種酷炫圖形去撩妹,所以打算學(zhuang)習(bi)一下。

其次要會HTML和JavaScript

舉個簡單的例子,畫一個柱狀圖,數據長這樣:var data = [4, 8, 15, 16, 23, 42];
用HTML寫出來是這樣滴

<!DOCTYPE html>
<style>

.chart div {
  font: 10px sans-serif;
  background-color: steelblue;
  text-align: right;
  padding: 3px;
  margin: 1px;
  color: white;
}

</style>
<div class="chart">
  <div style="width: 40px;">4</div>
  <div style="width: 80px;">8</div>
  <div style="width: 150px;">15</div>
  <div style="width: 160px;">16</div>
  <div style="width: 230px;">23</div>
  <div style="width: 420px;">42</div>
</div>

然后要是用D3,感覺的確是簡潔了一些。只要你會引個js文件,可以從網上下,也可以直接連url,建議還是下一個,有時候官網都連不上,到時候不知道是自己寫錯了還是網沒連上。

<script src="https://d3js.org/d3.v4.min.js"></script>

繪制圖形的代碼

d3.select(".chart")
  .selectAll("div")
    .data(data)
  .enter().append("div")
    .style("width", function(d) { return d * 10 + "px"; })
    .text(function(d) { return d; });

第一步 用class選擇器選出圖表的容器

var chart = d3.select(".chart");

第二步 通過定義我們將用來展示數據的容器來進行數據連接的初始化(別問我為啥這句話讀起來不通順,因為我也不懂啥意思,強行翻譯的文檔,看代碼就懂了,囧)

var bar = chart.selectAll("div");

據文檔所說,這個數據連接是可以創建、更新或者刪除元素的,只要你想弄。文檔說這種模式可能有點奇怪,我也覺得是有一點難理解。但是總的來說,可以把這種模式認為是你想讓數據元素以什么形式存在。這樣可以把靜態的和動態的數據的代碼寫的幾乎一樣,的確省事兒。

解釋下那個selectAll

//append一個元素
svg.append("circle")
    .attr("cx", d.x)
    .attr("cy", d.y)
    .attr("r", 2.5);
//不用寫循環就能定義好所有元素
svg.selectAll("circle")
  .data(data)
  .enter().append("circle")
    .attr("cx", function(d) { return d.x; })
    .attr("cy", function(d) { return d.y; })
    .attr("r", 2.5);

But what’s with the selectAll("circle")? Why do you have to select elements that you know don’t exist in order to create new ones? WAT. Here’s the deal. Instead of telling D3 how to do something, tell D3 what you want.
甭管我叫你干啥,關鍵是我想要你干啥。D3你得自己揣摩。沒辦法我是新手,D3你多擔待。

第三步 連接數據到剛才指定的選擇的容器

var barUpdate = bar.data(data);

第四步,數據入棧

var barEnter = barUpdate.enter().append("div");

第五步,設置下直方圖的參數

barEnter.style("width", function(d) { return d * 10 + "px"; });

第六步,設置下文字

barEnter.text(function(d) { return d; });

又據文檔說,D3的選擇器還有其他功能。反正我覺得這地方和Beautifulsoup的各種選擇器挺像的,反正HTML和XML的樹形結構一長就是場噩夢。寫爬蟲那會兒的xpath要是用絕對路徑都能嚇死人。
文檔還說barEnter.style("width", function(d) { return d * 10 + "px"; });中的d * 10是神來之筆,其實就是控制下圖形相對大小,從而相對美觀。關于這點,還可以有一些其他改進。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內容