亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

當它們不適合內部時,在條形圖外部顯示圖表圖像

當它們不適合內部時,在條形圖外部顯示圖表圖像

墨色風雨 2021-12-23 15:33:37
我有這個代碼Fiddle ,它呈現一個條形圖,圖像位于每個條形的頂部。對于較小的值,我不希望圖像在條形圖內呈現,而是希望它位于條形圖的頂部/外部。例如,第 4 個欄會在欄的頂部而不是內部顯示圖像。是否有一種巧妙的方法來添加條件,因為條形圖將使用不斷變化的數據,因此需要一種方法來確定哪些條形將在外部顯示圖像,哪些將在內部顯示?var w = 750;var h = 300;var barPadding = 2;var dataset2 = [{    "category": "A",    "Value": 18,    "URLimage": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Baseball.svg/520px-Baseball.svg.png"  },  {    "category": "B",    "Value": 15,    "URLimage": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Baseball.svg/520px-Baseball.svg.png"  },  {    "category": "C",    "Value": 13,    "URLimage": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Baseball.svg/520px-Baseball.svg.png"  },  {    "category": "D",    "Value": 2,    "URLimage": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Baseball.svg/520px-Baseball.svg.png"  },  {    "category": "E",    "Value": 12,    "URLimage": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Baseball.svg/520px-Baseball.svg.png"  },  {    "category": "F",    "Value": 15,    "URLimage": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Baseball.svg/520px-Baseball.svg.png"  },  {    "category": "G",    "Value": 20,    "URLimage": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Baseball.svg/520px-Baseball.svg.png"  },  {    "category": "H",    "Value": 25,    "URLimage": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Baseball.svg/520px-Baseball.svg.png"  },  {    "category": "H",    "Value": 30,    "URLimage": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Baseball.svg/520px-Baseball.svg.png"  }]<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.min.js"></script>
查看完整描述

1 回答

?
MMMHUHU

TA貢獻1834條經驗 獲得超8個贊

一個簡單的條件運算符就足夠了:


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

    return h - (d.Value * 10) - (d.Value * 10 < 40 ? 40 : 0);

})

作為旁注,您應該使用 D3 音階。在您的特定數據集中,值可以很容易地映射到 SVG 坐標,但幾乎從來都不是這樣。


這是帶有該更改的代碼:

var w = 750;

var h = 300;

var barPadding = 2;




var dataset2 = [{

    "category": "A",

    "Value": 18,

    "URLimage": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Baseball.svg/520px-Baseball.svg.png"

  },

  {

    "category": "B",

    "Value": 15,

    "URLimage": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Baseball.svg/520px-Baseball.svg.png"

  },

  {

    "category": "C",

    "Value": 13,

    "URLimage": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Baseball.svg/520px-Baseball.svg.png"

  },

  {

    "category": "D",

    "Value": 2,

    "URLimage": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Baseball.svg/520px-Baseball.svg.png"

  },

  {

    "category": "E",

    "Value": 12,

    "URLimage": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Baseball.svg/520px-Baseball.svg.png"

  },

  {

    "category": "F",

    "Value": 15,

    "URLimage": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Baseball.svg/520px-Baseball.svg.png"

  },

  {

    "category": "G",

    "Value": 20,

    "URLimage": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Baseball.svg/520px-Baseball.svg.png"

  },

  {

    "category": "H",

    "Value": 25,

    "URLimage": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Baseball.svg/520px-Baseball.svg.png"

  },

  {

    "category": "H",

    "Value": 30,

    "URLimage": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Baseball.svg/520px-Baseball.svg.png"

  }

]


//Create SVG element

var svg = d3.select("body")

  .append("svg")

  .attr("width", w)

  .attr("height", h);


svg.selectAll("rect")

  .data(dataset2)

  .enter()

  .append("rect")

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

    return i * (w / dataset2.length);

  })

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

    return h - (d.Value * 10);

  })

  .attr("width", w / dataset2.length - barPadding)

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

    return d.Value * 10;

  })



svg.selectAll(".images")

  .data(dataset2)

  .enter().append("svg:image")

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

    return i * (w / dataset2.length) + 18;

  })

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

    return h - (d.Value * 10) - (d.Value * 10 < 40 ? 40 : 0);

  })

  .attr("width", 40)

  .attr("height", 40)

  .attr("xlink:href", function(d, i) {

    return dataset2[i].URLimage

  });

<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.min.js"></script>


查看完整回答
反對 回復 2021-12-23
  • 1 回答
  • 0 關注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號