D3js закругленная горизонтальная диаграмма с прямым правым краем на всех уровняхCSS

Разбираемся в CSS
Ответить Пред. темаСлед. тема
Anonymous
 D3js закругленная горизонтальная диаграмма с прямым правым краем на всех уровнях

Сообщение Anonymous »


Я пытаюсь создать закругленную горизонтальную диаграмму, но в коде есть проблема: прямой край полосы искажается при неправильном радиусе границы, когда он приближается к 100%. Я также заметил, что он ломается и при низких значениях 1% и 4%.

Как стабилизировать код, чтобы часть гистограммы была обрезана, но не нарушала контейнер


Изображение

Изображение

Изображение

Изображение

Изображение

Изображение

Изображение

Изображение


мультибар d3 d3.select("тело") .selectAll('svg') .удалять(); var data = [{"label": "Toblerone", "value": 97}]; вар ш = parseInt(280, 10), ч = parseInt(120, 10); var color = d3.scaleOrdinal().range(['#046395', '#d62828', '#f77f00', '#fcbf49', '#eae2b7']); data.forEach(функция(d) { d.total = +d.value; }); var Margin = {сверху: 20, справа: 10, снизу: 20, слева: 20}; var width = w - поля.слева - поля.права; вар высота = ч - маржа.верх - маржа.дно; вар х = d3.scaleLinear() .range([0, ширина]); вар у = d3.scaleBand() .range([высота, 0]) .padding(0,1); x.domain([0, 100]) y.domain(data.map(function(d) { return d.total; })); var svg = d3.select("тело") .append("SVG") .style('фон','#5902f6') .attr("ширина", ширина + поле.лево + поле.право) .attr("высота", высота + поле.верх + поле.дно) .append("г") .attr('класс', 'столбчатая диаграмма') .attr("transform", "translate(" + поля.left + "," + поля.top + ")"); вар граница = 4; var bar = svg.append('g').attr('class', 'bars'); bars.selectAll(".bg") .data(данные) .enter().append("прямой") .attr("класс", "фон") .attr('rx',()=>{ const barHeight = y.bandwidth(); возврат барВысота/2 }) .attr('ry',()=>{ const barHeight = y.bandwidth(); возврат барВысота/2 }) .attr('заполнить','#5902f6') .attr('обводка','белый') .attr('ширина штриха',граница-1) .attr("ширина",x(100)) .attr("y", function(d) { return y(d.value); }) .attr("высота", y.bandwidth()); ; bar.selectAll(".bar") .data(данные) .входить() .append("путь") .attr("класс", "бар") .attr("заполнить", "#2cc2d3") .attr('обводка','белый') .attr('ширина штриха',3.2) .attr("d", function(d) { const barWidth = x(d.total); const barHeight = y.bandwidth(); const leftCornerRadius = barHeight/2; пусть angularRadius = barHeight/2; if (d.total >= (100 - barHeight/5)) { angularRadius = (d.total - (100 - barHeight/5)) * 2,5; вернуть ` М ${leftCornerRadius} 0 H ${barWidth - angularRadius} A ${cornerRadius} ${cornerRadius} 0 0 1 ${barWidth} ${cornerRadius} V ${barHeight - angularRadius} A ${cornerRadius} ${cornerRadius} 0 0 1 ${barWidth - angularRadius} ${barHeight} Ч ${leftCornerRadius} A ${leftCornerRadius} ${leftCornerRadius} 0 0 1 0 ${barHeight - leftCornerRadius} В ${leftCornerRadius} A ${leftCornerRadius} ${leftCornerRadius} 0 0 1 ${leftCornerRadius} 0 З `; } еще { вернуть ` М ${cornerRadius} 0 Ч ${barWidth} В ${barHeight} Ч ${cornerRadius} A ${cornerRadius} ${cornerRadius} 0 0 1 0 ${barHeight - angularRadius} В ${cornerRadius} A ${cornerRadius} ${cornerRadius} 0 0 1 ${cornerRadius} 0 З `; } }) .attr("преобразование", function(d) { return `translate(0, ${y(d.value)})`; }); bar.selectAll(".label") .data(данные) .enter().append("текст") .attr("класс", "метка") .attr('текст-якорь', функция(d) { вернуть d.total
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как преобразовать аудиосэмплы PCM с прямым порядком байтов в с прямым порядком байтов
    Anonymous » » в форуме C++
    0 Ответы
    120 Просмотры
    Последнее сообщение Anonymous
  • Как создать гиперссылки на узлы в d3js NetworkX diGraph
    Anonymous » » в форуме Python
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Chart.js Сложная горизонтальная барная диаграмма Ведущий пробел
    Anonymous » » в форуме Javascript
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Диаграмма Альтаира пуста в раскрывающемся списке, когда отображается другая диаграмма
    Anonymous » » в форуме Python
    0 Ответы
    112 Просмотры
    Последнее сообщение Anonymous
  • Альтаирная диаграмма пуста к выпадению, когда отображается другая диаграмма
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «CSS»