安装d3和d3-cloud和ts环境

文章讲述了在TypeScript环境下安装d3和d3-cloud库时需要额外安装@types/d3和@types/d3-cloud以避免打包问题。在使用d3.layout.cloud()时遇到问题,需通过cloud.default()来调用。文中给出了一个词云渲染的示例代码,涉及数据处理、尺寸计算和SVG渲染。
摘要由CSDN通过智能技术生成

安装d3和d3-cloud
对于ts的环境需要在install d3之后 需要安装@types/d3
不然不能打包

使用时有个大坑,就是调用cloud时,得 var designLayout = cloud.default();
这么调用,我也是奇了怪了。(还有cloud()和d3.layout.cloud(),这两个在我的项目中不生效。)

npm i d3
npm i --save-dev @types/d3
npm i d3-cloud
npm i --save-dev @types/d3-cloud
// line大类图元的父类option

import * as d3 from "d3";
import * as cloud from "d3-cloud";

// 绑定事件,处理数据,并渲染
function dealOption(option, pelInstance) {
  console.log(cloud, "cloud", d3);
  let editParam = null;

  let dealState = true;


  // // 数组,有多个值(暂时记录)
  var wordData = [];
  let gaugeDataIndex = getIndex(tableName, gaugeData[0].name, resultData);
  gaugeTableData.forEach((item) => {
    if (typeof item[sizeIndex] == "string") {
      wordData.push({
        text: item[gaugeDataIndex],
        size: Number(item[sizeIndex]),
      });
    } else {
      wordData.push({ text: item[gaugeDataIndex], size: item[sizeIndex] });
    }
  });
//  container是dom,这里没有定义。
  var domWidth = container.clientWidth;
  var domHeight =container.clientHeight;

  const data =
   [
     { text: "apple", size: 320 },
     { text: "orange", size: 24 },
    { text: "banana", size: 16 },
     { text: "watermelon", size: 80 },
    { text: "grape", size: 40 },
   ];
  var dataset = [];
  for (var i = 0; i < data.length; i++) {
    if (data[i].hasOwnProperty("size")) {
      dataset.push(data[i].size);
    }
  }
  var min = d3.min(dataset); //得到最小值
  var max = d3.max(dataset); //得到最大值

  var scaleLinear = d3.scaleLinear().domain([min, max]).range([18, 50]);

  var designLayout = cloud.default();
  const layout = designLayout
    .size([domWidth, domHeight])
    .words(data)
    .padding(5)
    .rotate(function () {
      return ~~(Math.random() * 2) * 90;
    })
    .font("Impact")
    .fontSize(function (d) {
      return scaleLinear(d.size);
    })
    .on("end", draw);

  layout.start();

  function draw(words) {
    d3.select(option.pretreatment.initArgs.container)
      .append("svg")
      .attr("width", layout.size()[0])
      .attr("height", layout.size()[1])
      .append("g")
      .attr(
        "transform",
        "translate(" + layout.size()[0] / 2 + "," + layout.size()[1] / 2 + ")"
      )
      .selectAll("text")
      .data(words)
      .enter()
      .append("text")
      .style("font-size", function (d) {
        return scaleLinear(d.size) + "px";
      })
      .style("font-family", "Impact")
      .style("fill", function (d, i) {
        return d3.schemeCategory10[i % 10];
      })
      .attr("text-anchor", "middle")
      .attr("transform", function (d) {
        return "translate(" + [d.x, d.y] + ")rotate(" + d.rotate + ")";
      })
      .text(function (d) {
        return d.text;
      });
  }
  return dealState;
}

export { dealOption };

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值