# 第三十關:C3.js 圖表整合
###### tags: `JS新手特訓班`
慘了,這次客戶希望用圖表呈現,**看看誰的完課率最好,同時可以看出排名**,
但小杰只有處理過折線圖,從來沒用過其他的圖表,於是禿頭俠告訴他,其實那位開發者,也是看這裡的[文件](https://c3js.org/examples.html)複製貼上來的。
小杰點了幾個範例全部都英文,覺得非常吃力,想當初高中大學整個被當到不行,但是點進去看到 Code 時,然後再搭配之前的範例,也稍微推敲出來一些概念,像是他就找到了這個[長條圖](https://c3js.org/samples/chart_bar.html),突然靈光山一閃,好像可以用成下面的呈現方式:
![](https://i.imgur.com/RcdQIkl.png)
**雖然想歸想,但是還是得拿掉些程式碼,再嘗試整合撰寫,一起幫幫小杰吧!**
---
## 問題
1. 請嘗試用 codepen 附上你的解答,這次的需求是「 用 c3.js 圖表顯示,看看誰的完課率最好,同時可以看出排名**」
2. 圖表不局限於上面的長條圖,也可尋找合適的圖
3. 週六日請嘗試寫一篇 blog,分享解題流程,讓其他人也可以受益
### 答案
- [第30關 Codepen](https://codepen.io/mio514/pen/RwrmQyg)
- [[JS學徒特訓班]C3.js 基本認識與圖表整合](https://medium.com/coding-girl-life/js-60challenge-c3js-ca25e58c8f7c)
```javascript=
var url ="https://raw.githubusercontent.com/hexschool/hexschoolNewbieJS/master/data.json";
var data = [];
var nameList =[]; //參賽者姓名
var completion = ["完成率"]; //參賽者完成率
//取得資料
axios.get(url).then((res) => {
data = res.data;
sortData();
}).catch((error) => {
console.log('資料錯誤', error);
});
//處理資料
function sortData () {
//根據完成率將資料排序
data.sort(function(a,b){
return parseInt(b.process) - parseInt(a.process);
});
//排除完成率為 0的參賽者
data.forEach(function(item) {
var isProcess = parseInt(item.process);
if ( isProcess !== 0 ) {
completion.push(isProcess)
nameList.push(item.name)
};
});
render(completion, nameList);
};
//繪製圖表
function render (completion, nameList) {
var chart = c3.generate({
data:{
columns:[completion],
type: 'bar',
colors: {
完成率: "#ffb300"
}
},
axis:{
rotated: true, //旋轉圖表
x: {
show: true, // 顯示 X 軸
type: "category", // X 軸資料類型
categories: nameList, // X 軸需顯示的資料
tick: {
multiline: false // 顯示換行設定
},
label: {
text: "參賽者姓名",
position: "outer-center"
}
},
y: {
show: true, // 顯示 Y 軸
max: 100 // Y 軸資料最大值
},
},
size: {
height: completion.length * 45, //調整圖表高度
width: 1024
},
});
// console.log(completion);
// console.log(nameList);
};
```
---
### 同學的各種解法
* [Nate Yeh](https://codepen.io/hellokiddingtw/pen/MWKPzjP)
* [William Kang](https://codepen.io/william_k/pen/LYGXLeV)
* [Erica](https://codepen.io/kaoru44689/pen/jOWXPxM)
* [Tim Hsu](https://codepen.io/tim_hsu/pen/GRoXdgY)
---
### [blog 解決題目心得連結張貼處](https://hackmd.io//Vp1FRGPMRymM7FOxaQ_srQ)
### 參考資料
1. [C3.js基本認識](https://hsuchihting.github.io/javascript/20200715/3292510004/)
2. [JS 學徒特訓班 30 C3.js 圖表整合筆記](https://hackmd.io/CGVAXBSeTACnlwkc9wB-ew)
3. [第30關 - C3.js 圖表整合](https://www.notion.so/30-C3-js-869a8cc4e4264686b2f9808ff000956e)
4. [C3.js 資料圖表](https://hackmd.io/4rYt6CF9TMCmmFqPnF8Tig?view)