--- 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
D3 min()max()方法可用于帮助设置比例。给定复杂的数据集,一个优先级是设置比例,以便可视化符合SVG容器的宽度和高度。您希望在SVG画布内绘制所有数据,以便在网页上显示。下面的示例设置散点图数据的x轴刻度。 domain()方法将信息传递给关于绘图的原始数据值的比例。 range()方法为其提供有关可视化的网页上的实际空间的信息。在该示例中,域从0变为集合中的最大值。它使用max()方法和基于数组中x值的回调函数。该范围使用SVG画布的宽度( w ),但它也包含一些填充。这会在散点图点和SVG画布边缘之间留出空间。
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;

//在SVG画布边界和绘图之间填充
const padding = 30;
const xScale = d3.scaleLinear()
.domain([0,d3.max(dataset,(d)=> d [0])])
.range([padding,w - padding]);
填充可能首先令人困惑。将x轴描绘为0到500的水平线(SVG画布的宽度值)。在range()方法中包含填充会强制绘图沿着该行(而不是0)从30开始,并以470(而不是500)结束。
## Instructions
使用yScale变量创建线性y轴刻度。域应该从零开始并转到集合中的最大y值。范围应使用SVG高度( h )并包括填充。 注意
记得保持情节正面朝上。设置y坐标的范围时,较高的值(高度减去填充)是第一个参数,较低的值是第二个参数。
## Tests
```yml tests: - text: h2的文本应为30。 testString: 'assert(output == 30 && $("h2").text() == "30", "The text in the h2 should be 30.");' - text: 'yScale的domain()应该等于[0, 411] 0,411 [0, 411] 。' testString: 'assert(JSON.stringify(yScale.domain()) == JSON.stringify([0, 411]), "The domain() of yScale should be equivalent to [0, 411].");' - text: 'yScale的range()应相当于[470, 30] 470,30 [470, 30] 。' testString: 'assert(JSON.stringify(yScale.range()) == JSON.stringify([470, 30]), "The range() of yScale should be equivalent to [470, 30].");' ```
## Challenge Seed
```html ```
## Solution
```js // solution required ```