#javascript #d3.js
Вопрос:
Всем привет, я работаю с гистограммой, используя D3.js в качестве поступающих данных я хотел бы использовать переменную, полученную из объекта диапазона (input1 в моем html).
вот фрагмент кода, в котором для данных используется значение 800 :
const ranges = ['input1'];
const data = [
{ name: 'Rust', score: '800' },
Это работает нормально, но я не могу заставить его использовать мой контент; «диапазоны» (отображение входных данных из объекта диапазона)
const ranges = ['input1'];
const data = [
{ name: 'Rust', score: 'ranges' },
Он не отображает никаких значений на гистограмме.
Кто-нибудь знает, как я могу вызвать свою переменную из объекта диапазона в качестве значения для гистограммы? любая помощь будет признательна.
код для гистограммы :
const ranges = ['input1'];
const data = [
{ name: 'Rust', score: '800' },
];
const width = 900;
const height = 450;
const margin = { top: 50, bottom: 50, left: 50, right: 50 };
const svg = d3.select('#d3-container')
.append('svg')
.attr('width', width - margin.left - margin.right)
.attr('height', height - margin.top - margin.bottom)
.attr("viewBox", [0, 0, width, height]);
const x = d3.scaleBand()
.domain(d3.range(data.length))
.range([margin.left, width - margin.right])
.padding(0.1)
const y = d3.scaleLinear()
.domain([0, 100])
.range([height - margin.bottom, margin.top])
svg
.append("g")
.attr("fill", 'royalblue')
.selectAll("rect")
.data(data.sort((a, b) => d3.descending(a.score, b.score)))
.join("rect")
.attr("x", (d, i) => x(i))
.attr("y", d => y(d.score))
.attr('title', (d) => d.score)
.attr("class", "rect")
.attr("height", d => y(0) - y(d.score))
.attr("width", x.bandwidth());
function yAxis(g) {
g.attr("transform", `translate(${margin.left}, 0)`)
.call(d3.axisLeft(y).ticks(null, data.format))
.attr("font-size", '20px')
}
function xAxis(g) {
g.attr("transform", `translate(0,${height - margin.bottom})`)
.call(d3.axisBottom(x).tickFormat(i => data[i].name))
.attr("font-size", '20px')
}
svg.append("g").call(xAxis);
svg.append("g").call(yAxis);
svg.node();
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous">
<script src="https://d3js.org/d3.v5.min.js"></script>
<title>Document</title>
</head>
<body>
<!-- QUESTION 1 -->
<form id="q1">
<div id="qhead" class="d-flex p-2 bd-highlight text-center">
<h1>Question 1</h1>
</div>
<div id="ondertitel" class="d-flex p-2 bd-highlight text-center">
<h2>Ik ervaar rust wanneer ik een duidelijke planning heb voor die dag. </h2>
</div>
<div class="d-flex p-4 text-center">
<label for="customRange2" class="form-label"></label>
<input type="range" class="form-range" min="1" max="5" id="input1" oninput="q1points.value = this.value">
<output id="q1points">0</output>
</div>
<p id="res_1"></p>
<button id="btn-1" type="button" class="btn btn-danger">Volgende</button>
</form>
<!-- Result divs -->
<div id="group">
<p id="result"></p>
</div>
<div id="d3-container">
<h1>Resultaten</h1>
</div>
<!-- links -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="quiz_2.js"></script>
<script src="https://cdn.anychart.com/releases/8.0.0/js/anychart-base.min.js"></script>
</body>
</html>