安装d3和d3-cloud和ts环境

安装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 };

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是一个使用d3d3-contour绘制等高线的示例代码: ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>D3 Contour Example</title> <script src="https://d3js.org/d3.v5.min.js"></script> <script src="https://d3js.org/d3-cont.v1.min.js"></script> </head> <body> <svg width="800" height="600"></svg> <script> // 定义数据 const data = [ [0, 0, 1, 2, 2, 1, 0, 0], [0, 2, 5, 5, 4, 2, 0, 0], [1, 3, 5, 6, 5, 3, 1, 0], [1, 3, 5, 7, 6, 4, 1, 0], [0, 2, 4, 6, 5, 3, 0, 0], [0, 1, 3, 4, 3, 2, 0, 0], [0, 0, 1, 2, 2, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0] ]; // 定义颜色比例尺 const color = d3.scaleSequential(d3.interpolateGreys).domain([0, 10]); // 创建等高线生成器 const contour = d3.contour() .size([data[0].length, data.length]) .thresholds(d3.range(0, 10, 1)); // 生成等高线数据 const contours = contour(data); // 创建SVG元素 const svg = d3.select("svg"); // 创建路径元素,绘制等高线 svg.selectAll("path") .data(contours) .enter().append("path") .attr("d", d3.geoPath(d3.geoIdentity().scale(80))) .attr("fill", d => color(d.value)) .attr("stroke", "none"); </script> </body> </html> ``` 在上述示例代码中,我们首先定义了一个8x8的数据矩阵,然后定义了一个颜色比例尺和一个等高线生成器,最后使用d3.geoPath和d3.geoIdentity来绘制等高线路径,并使用颜色比例尺为等高线填充颜色。你可以根据实际需求修改数据和配置参数来绘制不同的等高线。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值