数据可视化 D3 图表的绘制(三)添加坐标轴

坐标轴

  • axisLeft() 刻度向左
  • axisRight() 刻度向右
  • axisBottom() 刻度向下
  • axisTop() 刻度向上

坐标轴由什么构成

在 SVG 画布的预定义元素里,有六种基本图形:

  • 矩形
  • 圆形
  • 椭圆
  • 线段
  • 折线
  • 多边形

另外,还有一种比较特殊,也是功能最强的元素:

  • 路径

画布中的所有图形,都是由以上七种元素组成。

显然,这里面没有坐标轴 这种元素。

因此,我们需要用其他元素来组合成坐标轴,最终使其变为类似以下的形式:

<g>
<!-- 第一个刻度 -->
<g>
<line></line>   <!-- 第一个刻度的直线 -->
<text></text>   <!-- 第一个刻度的文字 -->
</g>
<!-- 第二个刻度 -->
<g>
<line></line>   <!-- 第二个刻度的直线 -->
<text></text>   <!-- 第二个刻度的文字 -->
</g> 
...
<!-- 坐标轴的轴线 -->
<path></path>
</g>

分组元素 g,是 SVG 的元素,意思是 group。此元素是将其他元素进行组合的容器,在这里是用于将坐标轴的其他元素分组存放。

代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>The Seventh</title>
</head>
<script src="../../../JS/d3.min.js"></script>

<body>
    <script>
            var width = 300;	//画布的宽度
            var height = 300;	//画布的高度
    
            var svg = d3.select("body")				//选择文档中的body元素
                        .append("svg")				//添加一个svg元素
                        .attr("width", width)		//设定宽度
                        .attr("height", height);	//设定高度
    
            var dataset = [ 2.5, 0.9 , 2.1 , 1.3 , 1.7  ];
    
            var linear = d3.scaleLinear()
                    .domain([0, d3.max(dataset)])
                    .range([0, 250]);
    
            var rectHeight = 25;	//每个矩形所占的像素高度(包括空白)
    
            svg.selectAll("rect")
                .data(dataset)
                .enter()
                .append("rect")
                .attr("x",20)
                .attr("y",function(d,i){
                    return i * rectHeight;
                })
                .attr("width",function(d){
                    return linear(d);
                })
                .attr("height",rectHeight-2)
                .attr("fill","steelblue");
        /**
         * 比例尺这个方法在V3 V4 版本中方法被规范了,
         * V3 中是axis()调出比例尺方法,orient()划定比例尺的方向
         * 而在v4中直接就是axisBottom()指定比例尺向下
         * var axis = d3.svg.axis()
                        .scale(linear)		//指定比例尺
                        .orient("bottom")	//指定刻度的方向
                        .ticks(7);			//指定刻度的数量
         * */ 
            var axis = d3.axisBottom()
                        .scale(linear)		//指定比例尺
                        .ticks(7);			//指定刻度的数量
            svg.append("g")
                .attr("class","axis")
                .attr("transform","translate(20,130)")
                .call(axis);
    </script>  	
</body>
</html>

在这里插入图片描述
这样一张简单的图表就制作完了

发布了79 篇原创文章 · 获赞 89 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_39141486/article/details/102768735