Я пытаюсь создать круговую диаграмму с помощью D3JS. Когда вы нажимаете на срез, Ajax отправляется на сервер и извлекает детей среза. У детей всегда есть значение, которое сумма является значением родителя. Я мог бы использовать увеличение солнечного луча, но я хочу, чтобы только один уровень был видимым во все времена, который для меня скорее круговой диаграммы, чем солнцезащитный. ломтик со своими детьми (возвращенный Ajax) и оживлял пирог, чтобы родители полностью разжигались (со значением нуля), а дети занимают весь пирог и заменяют родителей (которые удаляются из ДАННЫЕ). Имейте следующий код, который иллюстрирует проблему:
https://codepen.io/jberli/pen/jeornjq
и здесь, часть JavaScript part of Codepen:
// The current slices of the pie
var parents = [
// Only parent1 have children
{ 'name': 'parent1', 'value': 50 },
{ 'name': 'parent2', 'value': 20 },
{ 'name': 'parent3', 'value': 80 },
{ 'name': 'parent4', 'value': 40 },
]
// Those are the children of the parent1
var children = [
{ 'name': 'children1', 'value': 10 },
{ 'name': 'children2', 'value': 5 },
{ 'name': 'children3', 'value': 20 },
{ 'name': 'children4', 'value': 15 },
]
var data = parents;
data.sort((a, b) => b.value - a.value);
var container = document.getElementById('chart');
const width = container.offsetWidth;
const height = width;
const outer = height / 2;
const inner = outer * .5;
const radius = width / 4;
const tau = 2 * Math.PI;
const color1 = d3.color("hsl(0, 45%, 55%)");
const color2 = d3.color("hsl(360, 45%, 55%)");
const interpolation = d3.interpolateHslLong(color1, color2);
var color = d3.scaleOrdinal(d3.quantize(interpolation, data.length + 1));
var svg = d3.create("svg").attr("viewBox", [-width/2, -height/2, width, height]);
var arc = d3.arc().innerRadius(inner).outerRadius(outer);
// Create the pie chart
var pie = d3.pie().value((d) => d["value"]);
const path = svg.datum(data).selectAll("path")
.data(pie)
.join("path")
.attr("fill", (d, i) => color(i))
.attr("d", arc)
.style("cursor", "pointer")
.each(function(d) { this._current = d; })
.on("click", (e, d) => {
// Check if parent1 is clicked
if (d.data.name === 'parent1') {
// Set children as current data
data = children;
// Sort the data by value
data.sort((a, b) => b.value - a.value);
// Recalculate the color scale
color = d3.scaleOrdinal(d3.quantize(interpolation, data.length + 1));
// NEED TO REPLACE THE CLICKED SLICE WITH ITS CHILDREN
// THEN ANIMATE THE PIE FOR THE CHILDREN TO GROW
// WHILE PARENTS ARE SQUISHED (VALUE TO 0) AND REMOVED FROM THE DATA
}
})
container.append(svg.node());
Подробнее здесь: https://stackoverflow.com/questions/794 ... -subslices
Диаграмма D3.JS Замените существующий кусочек на несколько подкладок ⇐ Javascript
Форум по Javascript
1740223783
Anonymous
Я пытаюсь создать круговую диаграмму с помощью D3JS. Когда вы нажимаете на срез, Ajax отправляется на сервер и извлекает детей среза. У детей всегда есть значение, которое сумма является значением родителя. Я мог бы использовать увеличение солнечного луча, но я хочу, чтобы только один уровень был видимым во все времена, который для меня скорее круговой диаграммы, чем солнцезащитный. ломтик со своими детьми (возвращенный Ajax) и оживлял пирог, чтобы родители полностью разжигались (со значением нуля), а дети занимают весь пирог и заменяют родителей (которые удаляются из ДАННЫЕ). Имейте следующий код, который иллюстрирует проблему:
https://codepen.io/jberli/pen/jeornjq
и здесь, часть JavaScript part of Codepen:
// The current slices of the pie
var parents = [
// Only parent1 have children
{ 'name': 'parent1', 'value': 50 },
{ 'name': 'parent2', 'value': 20 },
{ 'name': 'parent3', 'value': 80 },
{ 'name': 'parent4', 'value': 40 },
]
// Those are the children of the parent1
var children = [
{ 'name': 'children1', 'value': 10 },
{ 'name': 'children2', 'value': 5 },
{ 'name': 'children3', 'value': 20 },
{ 'name': 'children4', 'value': 15 },
]
var data = parents;
data.sort((a, b) => b.value - a.value);
var container = document.getElementById('chart');
const width = container.offsetWidth;
const height = width;
const outer = height / 2;
const inner = outer * .5;
const radius = width / 4;
const tau = 2 * Math.PI;
const color1 = d3.color("hsl(0, 45%, 55%)");
const color2 = d3.color("hsl(360, 45%, 55%)");
const interpolation = d3.interpolateHslLong(color1, color2);
var color = d3.scaleOrdinal(d3.quantize(interpolation, data.length + 1));
var svg = d3.create("svg").attr("viewBox", [-width/2, -height/2, width, height]);
var arc = d3.arc().innerRadius(inner).outerRadius(outer);
// Create the pie chart
var pie = d3.pie().value((d) => d["value"]);
const path = svg.datum(data).selectAll("path")
.data(pie)
.join("path")
.attr("fill", (d, i) => color(i))
.attr("d", arc)
.style("cursor", "pointer")
.each(function(d) { this._current = d; })
.on("click", (e, d) => {
// Check if parent1 is clicked
if (d.data.name === 'parent1') {
// Set children as current data
data = children;
// Sort the data by value
data.sort((a, b) => b.value - a.value);
// Recalculate the color scale
color = d3.scaleOrdinal(d3.quantize(interpolation, data.length + 1));
// NEED TO REPLACE THE CLICKED SLICE WITH ITS CHILDREN
// THEN ANIMATE THE PIE FOR THE CHILDREN TO GROW
// WHILE PARENTS ARE SQUISHED (VALUE TO 0) AND REMOVED FROM THE DATA
}
})
container.append(svg.node());
Подробнее здесь: [url]https://stackoverflow.com/questions/79459534/d3-js-pie-chart-replace-an-existing-slice-with-multiple-subslices[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия