Процент вырезов на диаграмме данных

Как бы я добавил процент выреза к моей диаграмме данных в диаграмме js, идентификатор цели, чтобы сделать диаграмму тоньше.

const data = {
  labels: ['onek', 'teo', 'Three'],
  datasets: [{
    data: [1, 3, 9],
    backgroundColor: [],
    borderColor: [],
    hoverOffset: 4
  }]
};


var chart = new Chart(document.getElementById('myChart'), {
  type: 'doughnut',
  data: data,
  options: {
    responsive: true,
    legend: {
      display: false
    },
  }
});

jQuery(function($) {
  // Function that formats a raw price amount
  function formatPrice(rawPrice) {
    return rawPrice.toLocaleString("en-US", {
      style: "currency",
      currency: "USD"
    });
  }

  $('form#roi').on('click', '.calculate-roi', function() {
    // update chart 
    chart.data.datasets.pop();
    chart.data.datasets.push({

      data: [mr_results_total, ea_results_total, rav_results_total],
      backgroundColor: [
        'rgb(255, 99, 132)',
        'rgb(54, 162, 235)',
        'rgb(255, 205, 86)'
      ],
      hoverOffset: 4,
    });

    Chart.pluginService.register({
      beforeDraw: function(chart) {

        var width = chart.chart.width,
          height = chart.chart.height,
          ctx = chart.chart.ctx;

        ctx.restore();

        ctx.beginPath();
        var fontSize = (height / 114).toFixed(2);
        ctx.font = fontSize + "em sans-serif";
        ctx.arc(width / 2, height / 2, 80, 0, 2 * Math.PI);
        ctx.fillStyle = '#8AC007';
        ctx.fill();
        ctx.lineWidth = 5;
        ctx.fillStyle = 'blue';
        ctx.strokeStyle = '#003300';
        ctx.stroke();
        ctx.fillText(text, textX, textY);
        ctx.save();



        var text = total_number,
          textX = Math.round((width - ctx.measureText(text).width) / 2),
          textY = height / 2;

        ctx.fillText(text, textX, textY);
        ctx.save();
      }
    });

    chart.update();

  });
});


var slider = document.getElementById("myRange");
var output = document.getElementById("demo");

// var slider2 = document.getElementById("myRange2");
// var output2 = document.getElementById("demo2");
output.innerHTML = slider.value;
// output2.innerHTML = slider2.value;

slider.oninput = function() {
  output.innerHTML = this.value;
}
#output {
  display: none;
  font-size: 26px;
  margin-top: 50px;
}

.help-inline {
  display: none;
}

.result {
  padding-top: 10px;
}

.roi-success {
  background: #269526;
  color: white;
}

.roi-danger {
  background: #d74e26;
  color: white;
}

input[type = "text"] {
  width: 100%;
  display: block;
  margin: 15px 0;
}

.btn {
  display: block;
}

.double-border {
  --b: 2px;
  /* thickness */
  --c: #3CD5AF;
  height: 100%;
  border-right: var(--b) solid var(--c);
  border-left: var(--b) solid var(--c);
  background: linear-gradient(var(--c) 0 0) left 10px bottom 0/var(--b) 50% no-repeat, linear-gradient(var(--c) 0 0) right 10px bottom 0/var(--b) 50% no-repeat
}

.slider {
  width: 100%;
  border-radius: 5px;
  background: #00AFAB;
  outline: none;
  opacity: 0.7;
  -webkit-transition: .2s;
  transition: opacity .2s;
  padding: 0 0 0 0;
  margin: 0;
}

.slider:hover {
  opacity: 1;
}

.slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 25px;
  height: 25px;
  border-radius: 50%;
  background: #00AFAB;
  cursor: pointer;
}

.slider::-moz-range-thumb {
  width: 25px;
  height: 25px;
  border-radius: 50%;
  background: #04AA6D;
  cursor: pointer;
}

select {
  width: 75%;
}

#output {
  font-size: 16px;
  margin-top: 0;
}

.chartbox {
  width: 100;
}
<link href = "https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel = "stylesheet" />
<script src = "//cdnjs.cloudflare.com/ajax/libs/Chart.js/2.1.6/Chart.bundle.js"></script>
<section <?php theme_section_attr_id() ?>
  <?php theme_section_attr_class( 'pb-5' ) ?>>
  <div class = "container">
    <div class = "row pt-5">
      <div class = "col-md-4 pt-5">
        <div class = "heading ">
        </div>
      </div>
      <div class = "col-md-8 border">
        <div class = "row p-5 pb-0">
          <div class = "col-md-6">
            <form id = "roi">
              <div class = "control-group">
                <p>Number <span id = "demo"></span></p>
                <div class = "slidecontainer">
                  <input id = "no_emp" type = "range" min = "50" max = "50000" value = "50" class = "slider" id = "myRange">
                </div>
                <p>Monthly <span id = "demo2"></span></p>
                <div class = "slidecontainer">
                  <input id = "month_inv" type = "range" min = "10" max = "1000" value = "10" class = "slider" id = "myRange2">
                </div>
              </div>
              <button type = "button" class = "btn btn-primary btn-block calculate-roi">Calculate</button>
            </form>
          </div>
          <div class = "col-md-6 text-center">
            <div class = "chartbox">
              <canvas id = "myChart"></canvas>
            </div>
            <p>Estimated Value</p>
            <h3 class = "total_number"></h3>
          </div>
        </div>
      </div>
    </div>

  </div>
</section>

Пробовали ли вы добавить вырез в объект options? options: { cutout: "90%" }. Кроме того, версия 2.1.6 довольно старая.

Yong Shun 06.06.2024 16:25

У меня есть, но не помогло, может я не туда добавил

Beep 06.06.2024 16:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

При использовании Chart.js версии 2 вам необходимо применить конфигурацию cutoutPercentage в options. Значение представляет собой процент

options: {
  ...,  
  cutoutPercentage: 80,
},

Для Chart.js версии 3 и выше в конфигурации cutout должно быть указано значение, основанное на описании.

Часть диаграммы, вырезанная из середины. Если строка заканчивается на «%», это процент радиуса диаграммы. число считается пикселями.

options: {
  ...,  
  cutout: '80%',
},

Демо @ StackBlitz

Другие вопросы по теме