博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
D3(v5) in TypeScript 坐标轴之 scaleBand用法
阅读量:5231 次
发布时间:2019-06-14

本文共 2745 字,大约阅读时间需要 9 分钟。

在学习d3时候,发现在TS中实现D3的坐标轴中遇到一些错误,而这些错误却不会存在于js(因为ts的类型检查)写法中,因此做下笔记:

import * as d3 from 'd3'; import * as React from 'react'; class TestGraph extends React.Component {
public componentDidMount() {
const marge = {
top: 60, bottom: 60, left: 60, right: 60 }; const dataSet: any[] = [10, 20, 30, 23, 13, 40, 27, 35, 20]; const svg = d3.select("svg"); const g = svg.append("g") .attr("transform", `translate(${marge.top},${marge.left})`); const width: any = svg.attr('width'); const height: any = svg.attr('height'); // 此处必须把.domain里的参数转为字符串数组,不然会报类型错 const xScale = d3.scaleBand() .domain(d3.range(dataSet.length).map(value => {
return value.toString(); })) .rangeRound([0, width - marge.left - marge.right]); const xAxis = d3.axisBottom(xScale); const yScale = d3.scaleLinear() .domain([0, d3.max(dataSet)]) .range([height - marge.top - marge.bottom, 0]); const yAxis = d3.axisLeft(yScale); const gs = g.selectAll(".rect") .data(dataSet) .enter() .append("g"); const rectPadding = 20;// 矩形之间的间隙 const rectWidth = xScale.step(); gs.append("rect") .attr("x", (d, i) => {
// 此处不能用xScale(i),因为参数只能接受string,就算使用i.toString(),也会报错此对象有可能为undefined return xScale.step() * (i + xScale.paddingOuter()) + rectPadding / 2; }) .attr("y", d => {
return yScale(d); }) .attr("width", rectWidth - rectPadding) .attr("height", d => {
return height - marge.top - marge.bottom - yScale(d); }) .attr("fill", "blue"); const fontSize = 14; gs.append("text") .attr("x", (d, i) => {
return xScale.step() * (i + xScale.paddingOuter()) + rectPadding / 2; }) .attr("y", d => {
return yScale(d); }) .attr("dx", (xScale.step() - rectPadding) / 2 - fontSize / 2) .attr("dy", 20) .attr("font-size", fontSize) .text(d => {
return d; }); g.append("g") .attr("transform", `translate(0,0)`) .call(yAxis); g.append("g") .attr("transform", `translate(0,${yScale(0)})`) .call(xAxis); } public render() {
return (
) } } export default TestGraph;

效果如下:

转载于:https://www.cnblogs.com/kbaoq/p/9376445.html

你可能感兴趣的文章
BZOJ 1001--[BeiJing2006]狼抓兔子(最短路&对偶图)
查看>>
C# Dynamic通用反序列化Json类型并遍历属性比较
查看>>
128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列
查看>>
定制jackson的自定义序列化(null值的处理)
查看>>
auth模块
查看>>
javascript keycode大全
查看>>
前台freemark获取后台的值
查看>>
log4j.properties的作用
查看>>
游戏偶感
查看>>
Leetcode: Unique Binary Search Trees II
查看>>
C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
Spring-hibernate整合
查看>>
c++ map
查看>>
exit和return的区别
查看>>
discuz 常用脚本格式化数据
查看>>
洛谷P2777
查看>>
PHPStorm2017设置字体与设置浏览器访问
查看>>
SQL查询总结 - wanglei
查看>>
安装cocoa pods时出现Operation not permitted - /usr/bin/xcodeproj的问题
查看>>
makefile中使用变量
查看>>