Chart.js Bar Chart с переключателем / переключателем для группировки данных / Устранение неполадок цвета панели

1

Моя главная цель - создать переключатель/переключатель для группировки данных (вместо фильтров вверху). Посмотрите скриншоты для справки:

Изображение 174551

Изображение 174551

Можно ли группировать данные и включать кнопки фильтра в переключатель?

Если это невозможно, мой план В должен показать все данные сразу и сохранить фильтр вверху. Вот код и ссылка jsfiddle:

<!-- Charts library -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.js"></script>

<div class="chart-wrapper">
  <canvas id="myChart" width="400" height="200"></canvas>
  <script>
    var ctx = document.getElementById("myChart").getContext('2d');
    var myChart = new Chart(ctx, {
        type: 'bar',
      data: {
        labels: ["option 1", "option 2"],

            datasets: [
        {
        label: 'yes',
        data: [714,233],
        backgroundColor: '#004831',
        },
        {
        label: 'no',
        data: [800, 451],
        backgroundColor: '#76B900'
        }
            ]},

        options: {
                scales: {
                    yAxes: [{
                        ticks: {
                            beginAtZero:true
            }
            }]
        }
        }
        });
    </script>
</div>

https://jsfiddle.net/fariadesign/kL810rnq/9/

Я ценю вашу помощь заранее.

Спасибо!

Теги:
chart.js
charts
bar-chart

1 ответ

3
Лучший ответ

он работает примерно так...

var chart = null;

var chartData = {
  labels: ['Question 1', 'Question 2'],
  datasets: [
    {label: 'yes', backgroundColor: '#004831', data: [714, 233]},
    {label: 'no', backgroundColor: '#76B900', data: [800, 451]}
  ]
};

var chartOptions = {
  tooltips: {mode: 'index', intersect: true},
  legend: {display: false},
  responsive: true,
  scales: {
    xAxes: [{
      ticks: {beginAtZero: true},
      stacked: true
    }],
    yAxes: [{
      ticks: {beginAtZero: true},
      stacked: false
    }]
  }
};

$(function() {

  chart = new Chart($('#chart'), {
    type: 'bar',
    data: chartData,
    options: chartOptions
  });
  
  $("input#toggle[type='checkbox']").click(function (event) {
    var isStacked = false;
    if ($(this).is(':checked')) {
      isStacked = true;
    } else {
      isStacked = false;
    }
    
    chart.options.scales = {
      xAxes: [{ stacked: isStacked }],
      yAxes: [{ stacked: isStacked }]
    };
    chart.update();
  });
  
});
canvas {
   -moz-user-select: none;
   -webkit-user-select: none;
   -ms-user-select: none;
}
.toggle {
    position: relative;
    margin: 20px auto;
    width: 55px;
    -webkit-user-select:none;
    -moz-user-select:none;
    -ms-user-select: none;
}
.toggle-checkbox {
    display: none;
}
.toggle-label {
    display: block; overflow: hidden; cursor: pointer;
    height: 20px; padding: 0; line-height: 20px;
    border: 0px solid #FFFFFF; border-radius: 30px;
    background-color: #9E9E9E;
}
.toggle-label:before {
    content: "";
    display: block; width: 30px; margin: -5px;
    background: #FFFFFF;
    position: absolute; top: 0; bottom: 0;
    right: 31px;
    border-radius: 30px;
    box-shadow: 0 6px 12px 0px #757575;
}
.toggle-checkbox:checked + .onoffswitch-label {
    background-color: #42A5F5;
}
.toggle-checkbox:checked + .toggle-label, .toggle-checkbox:checked + .toggle-label:before {
   border-color: #42A5F5;
}
.toggle-checkbox:checked + .toggle-label .toggle-inner {
    margin-left: 0;
}
.toggle-checkbox:checked + .toggle-label:before {
    right: 0px; 
    background-color: #2196F3; 
    box-shadow: 3px 6px 18px 0px rgba(0, 0, 0, 0.2);
}
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.min.js"></script>
<div class="toggle">
    <input id="toggle" type="checkbox" class="toggle-checkbox"/>
    <label for="toggle" class="toggle-label">&nbsp;</label>
</div>
<canvas id="chart" width="100%" height="100%"></canvas>

здесь документы.

  • 0
    Спасибо! Но почему просто показывает один бар? Я видел, как вы вводите число для двух баров в каждом случае ..
  • 0
    Прости за это. Я просто добавил еще один скриншот. Нет, я имел в виду два бара для каждого экземпляра (да и нет).
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню