freeCodeCamp/curriculum/challenges/chinese/04-data-visualization/data-visualization-with-d3/use-dynamic-scales.chinese.md

95 lines
4.0 KiB
Markdown
Raw Normal View History

---
id: 587d7fac367417b2b2512bdd
title: Use Dynamic Scales
required:
- src: 'https://cdnjs.cloudflare.com/ajax/libs/d3/4.3.0/d3.min.js'
challengeType: 6
videoUrl: ''
localeTitle: 使用动态比例
---
## Description
<section id="description"> D3 <code>min()</code><code>max()</code>方法可用于帮助设置比例。给定复杂的数据集一个优先级是设置比例以便可视化符合SVG容器的宽度和高度。您希望在SVG画布内绘制所有数据以便在网页上显示。下面的示例设置散点图数据的x轴刻度。 <code>domain()</code>方法将信息传递给关于绘图的原始数据值的比例。 <code>range()</code>方法为其提供有关可视化的网页上的实际空间的信息。在该示例中域从0变为集合中的最大值。它使用<code>max()</code>方法和基于数组中x值的回调函数。该范围使用SVG画布的宽度 <code>w</code> 但它也包含一些填充。这会在散点图点和SVG画布边缘之间留出空间。 <blockquote> const dataset = [ <br> [34,78] <br> [109,280] <br> [310,120] <br> [79,411] <br> [420,220] <br> [233,145] <br> [333,96] <br> [222,333] <br> [78,320] <br> [21,123] <br> ]。 <br> const w = 500; <br> const h = 500; <br><br> //在SVG画布边界和绘图之间填充<br> const padding = 30; <br> const xScale = d3.scaleLinear <br> .domain[0d3.maxdatasetd=&gt; d [0]] <br> .range[paddingw - padding]; </blockquote>填充可能首先令人困惑。将x轴描绘为0到500的水平线SVG画布的宽度值。在<code>range()</code>方法中包含填充会强制绘图沿着该行而不是0从30开始并以470而不是500结束。 </section>
## Instructions
<section id="instructions">使用<code>yScale</code>变量创建线性y轴刻度。域应该从零开始并转到集合中的最大y值。范围应使用SVG高度 <code>h</code> )并包括填充。 <strong>注意</strong> <br>记得保持情节正面朝上。设置y坐标的范围时较高的值高度减去填充是第一个参数较低的值是第二个参数。 </section>
## Tests
<section id='tests'>
```yml
tests:
- text: <code>h2</code>的文本应为30。
testString: 'assert(output == 30 && $("h2").text() == "30", "The text in the <code>h2</code> should be 30.");'
- text: 'yScale的<code>domain()</code>应该等于<code>[0, 411]</code> 0,411 <code>[0, 411]</code> 。'
testString: 'assert(JSON.stringify(yScale.domain()) == JSON.stringify([0, 411]), "The <code>domain()</code> of yScale should be equivalent to <code>[0, 411]</code>.");'
- text: 'yScale的<code>range()</code>应相当于<code>[470, 30]</code> 470,30 <code>[470, 30]</code> 。'
testString: 'assert(JSON.stringify(yScale.range()) == JSON.stringify([470, 30]), "The <code>range()</code> of yScale should be equivalent to <code>[470, 30]</code>.");'
```
</section>
## Challenge Seed
<section id='challengeSeed'>
<div id='html-seed'>
```html
<body>
<script>
const dataset = [
[ 34, 78 ],
[ 109, 280 ],
[ 310, 120 ],
[ 79, 411 ],
[ 420, 220 ],
[ 233, 145 ],
[ 333, 96 ],
[ 222, 333 ],
[ 78, 320 ],
[ 21, 123 ]
];
const w = 500;
const h = 500;
// Padding between the SVG canvas boundary and the plot
const padding = 30;
// Create an x and y scale
const xScale = d3.scaleLinear()
.domain([0, d3.max(dataset, (d) => d[0])])
.range([padding, w - padding]);
// Add your code below this line
const yScale = undefined;
// Add your code above this line
const output = yScale(411); // Returns 30
d3.select("body")
.append("h2")
.text(output)
</script>
</body>
```
</div>
</section>
## Solution
<section id='solution'>
```js
// solution required
```
</section>