Добавить столбчатую диаграмму в столбец

#css #angularjs #chart.js

#css #angularjs #chart.js

Вопрос:

 labels = ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC'];
  chartData = [
    {
      label: 'Doctors',
      data: [10, 20, 30, 40, 50, 40, 30, 20, 10, 20, 30, 40],
      backgroundColor: 'rgb(81, 193, 190)',
    },
    {
      label: 'Clinics',
      data: [20, 30, 40, 50, 40, 30, 20, 10, 20, 30, 40, 50],
      backgroundColor: 'rgb(46, 135, 203)',
    },
    {
      label: 'Hospitals',
      data: [30, 40, 50, 40, 30, 20, 10, 20, 30, 40, 50, 40],
      backgroundColor: 'rgb(209, 174, 200)',
    },
    {
      label: 'Pathology/Diagnosis',
      data: [40, 50, 40, 30, 20, 10, 20, 30, 40, 50, 40, 30],
      backgroundColor: 'rgb(103, 48, 121)',
    }
  ];

ngOnInit() {
    this.showChart();
}

showChart() {
    //var ctx = document.getElementById('barCanvas');
    const canvas = <HTMLCanvasElement> document.getElementById('barCanvas');
    const ctx = canvas.getContext('2d');
    this.barChart = new Chart(ctx, {

      type: 'bar',
      data: {
        labels: this.labels,
        datasets: this.chartData
      },
      options: {
        responsive: true,
        //maintainAspectRatio: false
      }
    });

    this.barChart.reDraw();
  }  
 .flex-container {
  display: flex;
  flex-direction: column;
  background-color: #ff80bf;
  flex-wrap: wrap;
}

.child-div {
  background-color: #6600cc;
  width: 100px;
  margin: 10px;
  text-align: center;
  padding-top: 20px;
  padding-bottom: 20px;
  font-size: 30px;
}

.chart-container {
  position: relative !important;
  width: 100%;
  height: 100%;
  // display: block !important;

  canvas {
    width: 100% !important;
    max-width: 800px;
    height: auto !important;
  }
}


.row {
  display: block;
  // border: 1px solid red;
}
.col-12{
  display: inline-block;
  width: 100%;
}
.col-9{
  display: inline-block;
  width: 75%;
}
.col-3{
  display: inline-block;
  width: 25%;
}
.p1{
  padding: 1em 1em;
}  
 <div class='row'>
  <div class='col-9'>
     <div class="chart-container">
      <canvas id="barCanvas"></canvas>
     </div>   
  </div>
  <div class='col-3 p1'>
    <div>
      <div class="flex-container">
        <div class="title">Dummy Heading</div>
        <div class="child-div">1</div>
        <div class="child-div">2</div>
        <div class="child-div">3</div>  
      </div>
    </div>
  </div>
</div>  

Я пытаюсь добавить диаграмму с помощью chart.js и некоторые связанные данные в 2 столбца строки. Я реализовал гистограмму программно, как указано в их официальных документах здесь. Я создал класс ‘row’ и 2 столбца шириной 75% и 25%. Я хочу заполнить 75% столбца диаграммой, а остальные 25% некоторыми данными. Но div (как показано на 1-м изображении розовым цветом с пронумерованным полем 1,2,3) отображается на той же высоте, что и диаграмма. Вместо этого он находится под диаграммой, как показано на 2-м изображении. Я нашел проблему для этого. Согласно официальным документам, родительский div холста диаграммы должен иметь позицию как относительную, что я и сделал. Но динамический div с именем класса chartjs-size-monitor добавляется в качестве родительского div canvas с помощью chart.js библиотека. Этот div имеет позицию стиля как абсолютную, что приводит к перемещению моего правого раздела данных вниз. Если я сниму флажок с этого стиля позиции, то div переместится вверх, как показано на рисунке 1. Кто-нибудь может помочь мне с этой проблемой? Спасибо.

введите описание изображения здесь.

введите описание изображения здесь

Комментарии:

1. Можете ли вы поделиться своим HTML-кодом, чтобы четко видеть, что вы делаете? Есть ли у вашего родительского div класс col-12 или row? Если нет, вы можете попробовать поместить свой родительский элемент в строку

2. Обновил мой запрос с помощью html, css и ts.

Ответ №1:

  1. кажется, что розовая область больше, чем любая из этих ячеек внутри нее. Возможно, вам следует изменить col-9 col-3 на col-10 col-2
  2. вы можете создать класс css, точно такой же, как тот, который вы проверяете в консоли разработчиков Google, и добавить в него только position:relative !important
  3. вы можете уменьшить поля в дочернем элементе и сделать относительную ширину с процентами вместо пикселей

Это первые решения, которые я могу предложить. Но я не интерфейсный разработчик! Я думаю, что будут гораздо лучшие решения.

Комментарии:

1. что касается 2-го пункта, класс div динамически генерируется chart.js библиотека как класс-оболочка для canvas, и этот класс div имеет абсолютную позицию. Не удается удалить этот стиль из этого динамического div

2. Хорошо, я вижу это. Я пытаюсь сказать следующее: если у вас есть свой собственный файл css в проекте, добавьте в него класс, такой как .chartjs-size-monitor, .chartjs-size-monitor-expand, .chartjs-size-monitor-shrink { position: relative !important } или дайте вашему родительскому div идентификатор и создайте класс, который будет применяться только к этому идентификатору. Я не знаю, работает ли это, но вы можете быстро попробовать. Может быть, ваш динамический CSS будет применяться позже и игнорировать его, я не знаю! Просто пытаюсь помочь 😉

3. Я уже пытался создать класс CSS с именем chartjs-size-monitor и добавить позицию: относительная !важно. Это не сработало. У динамического div все еще была позиция: абсолютная

4. Почему бы вам не попробовать столбчатую диаграмму, такую как chartjs.org/samples/latest/charts/bar/stacked . html затем вы можете уменьшить ширину вашей диаграммы. И я думаю, что это будет намного понятнее, чем 3-4 столбца близко друг к другу за каждый месяц?