picasso.js
?picasso.chart ()
是一個用來創造和畫圖表的函式id
為 container
的元素作為圖要畫的地方scales
會將資料做映射 (map)縮放,畫出來的圖 x 軸是時間 (t),其中時間包含開始和結束兩個值,y 軸是類別 (category)。components
是構成一張圖的元件,如常條圖是由多個 bar 組合而成。components: [{
// 在 x 軸的資料時間加上垂直線
type: 'grid-line',
x: 't'
},{
// 指定 y 軸的類別標示顯示在左邊
type: 'axis',
dock: 'left',
scale: 'y'
},{
// 指定 x 軸的時間顯示在下方
type: 'axis',
dock: 'bottom',
scale: 't',
// 指定時間格式是年-月
formatter: {
type: 'd3-time',
format: '%Y-%m'
}
},{
// 甘特圖由多條 bar 組成
key: 'bars',
type: 'box',
// 每個分類都有開始、結束時間
data: {
extract: {
field: 'Category',
props: {
start: { field: 'Started' },
end: { field: 'Ended' }
}
}
},
// 設定圖片格式,把直條圖轉橫向,指定每個直條圖寬度
settings: {
orientation: 'horizontal',
major: { scale: 'y' },
minor: { scale: 't' },
box: {
width: 0.8
}
}
}, {
// 標示每個分類的天數
type: 'labels',
displayOrder: 2,
// 設定格式
settings: {
sources: [{
component: 'bars',
selector: 'rect',
strategy: {
type: 'bar',
settings: {
direction: 'right',
labels: [{
placements: [{
position: 'outside'
}],
// 計算經過天數,`Math.round()`四捨五入取整數,864e5 是一天的毫秒數。
label: node => `${Math.round((node.data.end.value - node.data.start.value) / 864e5)} days`
}]
}
}
}]
}
}]
}
})