d3_01堆疊圖

先記錄一下


<html>

? <head>

? ? <meta charset="utf-8" />

? ? <title>堆棧圖</title>

? ? <style>

? ? ? .axis path,

? ? ? .axis line {

? ? ? ? fill: none;

? ? ? ? stroke: black;

? ? ? ? shape-rendering: crispEdges;

? ? ? }

? ? ? .axis text {

? ? ? ? font-family: sans-serif;

? ? ? ? font-size: 11px;

? ? ? }

? ? </style>

? </head>

? <body>

? ? <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>

? ? <script>

? ? ? var width = 700; //SVG繪制區(qū)域的寬度

? ? ? var height = 500; //SVG繪制區(qū)域的高度

? ? ? var svg = d3

? ? ? ? .select("body") //選擇<body>

? ? ? ? .append("svg") //在<body>中添加<svg>

? ? ? ? .attr("width", width) //設(shè)定<svg>的寬度屬性

? ? ? ? .attr("height", height); //設(shè)定<svg>的高度屬性

? ? ? //1. 確定初始數(shù)據(jù)

? ? ? var dataset = [

? ? ? ? {

? ? ? ? ? name: "PC",

? ? ? ? ? sales: [

? ? ? ? ? ? { year: 2005, profit: 3000 },

? ? ? ? ? ? { year: 2006, profit: 1300 },

? ? ? ? ? ? { year: 2007, profit: 3700 },

? ? ? ? ? ? { year: 2008, profit: 4900 },

? ? ? ? ? ? { year: 2009, profit: 700 }

? ? ? ? ? ]

? ? ? ? },

? ? ? ? {

? ? ? ? ? name: "SmartPhone",

? ? ? ? ? sales: [

? ? ? ? ? ? { year: 2005, profit: 2000 },

? ? ? ? ? ? { year: 2006, profit: 4000 },

? ? ? ? ? ? { year: 2007, profit: 1810 },

? ? ? ? ? ? { year: 2008, profit: 6540 },

? ? ? ? ? ? { year: 2009, profit: 2820 }

? ? ? ? ? ]

? ? ? ? },

? ? ? ? {

? ? ? ? ? name: "Software",

? ? ? ? ? sales: [

? ? ? ? ? ? { year: 2005, profit: 1100 },

? ? ? ? ? ? { year: 2006, profit: 1700 },

? ? ? ? ? ? { year: 2007, profit: 1680 },

? ? ? ? ? ? { year: 2008, profit: 4000 },

? ? ? ? ? ? { year: 2009, profit: 4900 }

? ? ? ? ? ]

? ? ? ? }

? ? ? ];

? ? ? //2. 轉(zhuǎn)換數(shù)據(jù)

? ? ? var stack = d3.layout

? ? ? ? .stack()

? ? ? ? .values(function(d) {

? ? ? ? ? return d.sales;

? ? ? ? })

? ? ? ? .x(function(d) {

? ? ? ? ? return d.year;

? ? ? ? })

? ? ? ? .y(function(d) {

? ? ? ? ? return d.profit;

? ? ? ? });

? ? ? var data = stack(dataset);

? ? ? console.log(data);

? ? ? //3. 繪制

? ? ? //外邊框

? ? ? var padding = { left: 50, right: 100, top: 30, bottom: 30 };

? ? ? //創(chuàng)建x軸比例尺

? ? ? var xRangeWidth = width - padding.left - padding.right;

? ? ? var xScale = d3.scale

? ? ? ? .ordinal()

? ? ? ? .domain(

? ? ? ? ? data[0].sales.map(function(d) {

? ? ? ? ? ? return d.year;

? ? ? ? ? })

? ? ? ? )

? ? ? ? .rangeBands([0, xRangeWidth], 0.3);

? ? ? //創(chuàng)建y軸比例尺

? ? ? //最大利潤(rùn)(定義域的最大值)

? ? ? var maxProfit = d3.max(data[data.length - 1].sales, function(d) {

? ? ? ? return d.y0 + d.y;

? ? ? });

? ? ? //最大高度(值域的最大值)

? ? ? var yRangeWidth = height - padding.top - padding.bottom;

? ? ? var yScale = d3.scale

? ? ? ? .linear()

? ? ? ? .domain([0, maxProfit]) //定義域

? ? ? ? .range([0, yRangeWidth]); //值域

? ? ? //顏色比例尺

? ? ? var color = d3.scale.category10();

? ? ? //添加分組元素

? ? ? var groups = svg

? ? ? ? .selectAll("g")

? ? ? ? .data(data)

? ? ? ? .enter()

? ? ? ? .append("g")

? ? ? ? .style("fill", function(d, i) {

? ? ? ? ? return color(i);

? ? ? ? });

? ? ? //添加矩形

? ? ? var rects = groups

? ? ? ? .selectAll("rect")

? ? ? ? .data(function(d) {

? ? ? ? ? return d.sales;

? ? ? ? })

? ? ? ? .enter()

? ? ? ? .append("rect")

? ? ? ? .attr("x", function(d) {

? ? ? ? ? return xScale(d.year);

? ? ? ? })

? ? ? ? .attr("y", function(d) {

? ? ? ? ? return yRangeWidth - yScale(d.y0 + d.y);

? ? ? ? })

? ? ? ? .attr("width", function(d) {

? ? ? ? ? return xScale.rangeBand();

? ? ? ? })

? ? ? ? .attr("height", function(d) {

? ? ? ? ? return yScale(d.y);

? ? ? ? })

? ? ? ? .attr(

? ? ? ? ? "transform",

? ? ? ? ? "translate(" + padding.left + "," + padding.top + ")"

? ? ? ? );

? ? ? var sss = groups

? ? ? ? .selectAll("text")

? ? ? ? .data(function(d) {

? ? ? ? ? return d.sales;

? ? ? ? })

? ? ? ? .enter()

? ? ? ? .append("text")

? ? ? ? .attr("x", function(d) {

? ? ? ? ? return xScale(d.year);

? ? ? ? })

? ? ? ? //.attr("y",function(d){ return yRangeWidth - yScale( d.y0 + d.y ); })

? ? ? ? .attr("y", function(d) {

? ? ? ? ? return 390;

? ? ? ? })

? ? ? ? .text("我們是1111111111111")

? ? ? ? .attr("transform", function(d) {

? ? ? ? ? debugger;

? ? ? ? ? let bbb = padding.left * 1 + xScale.rangeBand() / 2;

? ? ? ? ? let aaa = xScale(d.year) + 8 + xScale.rangeBand() / 2;

? ? ? ? ? debugger;

? ? ? ? ? return (

? ? ? ? ? ? "rotate3D(" +

? ? ? ? ? ? aaa +

? ? ? ? ? ? " 400 1 90) translate(" +

? ? ? ? ? ? bbb +

? ? ? ? ? ? "," +

? ? ? ? ? ? padding.top +

? ? ? ? ? ? ") "

? ? ? ? ? );

? ? ? ? });

? ? ? //添加坐標(biāo)軸

? ? ? //var xAxis = d3.svg.axis()

? ? ? // .scale(xScale)

? ? ? // .orient("bottom");

? ? ? //

? ? ? //yScale.range([yRangeWidth, 0]);

? ? ? //var yAxis = d3.svg.axis()

? ? ? // .scale(yScale)

? ? ? // .orient("left");

? ? ? //svg.append("g")

? ? ? // .attr("class","axis")

? ? ? // .attr("transform","translate(" + padding.left + "," + (height - padding.bottom) +? ")")

? ? ? // .call(xAxis);

? ? ? //svg.append("g")

? ? ? // .attr("class","axis")

? ? ? // .attr("transform","translate(" + padding.left + "," + (height - padding.bottom - yRangeWidth) +? ")")

? ? ? // .call(yAxis);

? ? ? //添加分組標(biāo)簽

? ? ? //var labHeight = 50;

? ? ? //var labRadius = 10;

? ? ? //var labelCircle = groups.append("circle")

? ? ? // .attr("cx",function(d){ return width - padding.right*0.98; })

? ? ? // .attr("cy",function(d,i){ return padding.top * 2 + labHeight * i; })

? ? ? // .attr("r",labRadius);

? ? ? //var labelText = groups.append("text")

? ? ? // .attr("x",function(d){ return width - padding.right*0.8; })

? ? ? // .attr("y",function(d,i){ return padding.top * 2 + labHeight * i; })

? ? ? // .attr("dy",labRadius/2)

? ? ? // .text(function(d){ return d.name; });

? ? </script>

? </body>

</html>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瘪阁,一起剝皮案震驚了整個(gè)濱河市未妹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌心肪,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纠吴,死亡現(xiàn)場(chǎng)離奇詭異硬鞍,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門固该,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)锅减,“玉大人,你說(shuō)我怎么就攤上這事伐坏≌唬” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵桦沉,是天一觀的道長(zhǎng)劫狠。 經(jīng)常有香客問(wèn)我,道長(zhǎng)永部,這世上最難降的妖魔是什么独泞? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮苔埋,結(jié)果婚禮上懦砂,老公的妹妹穿的比我還像新娘。我一直安慰自己组橄,他們只是感情好荞膘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著玉工,像睡著了一般羽资。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上遵班,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天屠升,我揣著相機(jī)與錄音,去河邊找鬼狭郑。 笑死腹暖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的翰萨。 我是一名探鬼主播脏答,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼亩鬼!你這毒婦竟也來(lái)了殖告?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤雳锋,失蹤者是張志新(化名)和其女友劉穎黄绩,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體魄缚,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宝与,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年焚廊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片习劫。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡咆瘟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出诽里,到底是詐尸還是另有隱情袒餐,我是刑警寧澤,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布谤狡,位于F島的核電站灸眼,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏墓懂。R本人自食惡果不足惜焰宣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望捕仔。 院中可真熱鬧匕积,春花似錦、人聲如沸榜跌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)钓葫。三九已至悄蕾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間础浮,已是汗流浹背帆调。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留霸旗,地道東北人贷帮。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓戚揭,卻偏偏與公主長(zhǎng)得像诱告,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子民晒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

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