Создание смешанной гистограммы с помощью ReactJS с использованием recharts или react-chartjs-2

снимок экрана с изображениемЯ пытаюсь реализовать несколько гистограмм для приведенного ниже требования к диаграмме в ReactJS, используя библиотеку recharts или react-chartjs-2. Я не смог найти никакого прямого доступного решения. Любые предложения, как создать подобный тип диаграммы

const data = [ { type: "Sample 1", data: [600, 400, 200, 800] }, { type: "Sampel 2", data: [700, 300, 600, 600] }, { type: "Total", data: [1300, 700, 800, 1400] } ];

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
2 328
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Основное требование может быть выполнено путем определения двух xAxes, одного для отдельных значений ('x1'), другого для общего бара ('x2').

Дополнительные сведения см. в главе «Создание нескольких осей» документации Chart.js.

Пожалуйста, взгляните на приведенный ниже пример кода и посмотрите, как он работает. Хотя это чистое решение JavaScript, концепция также должна работать для react-chartjs-2.

const data = [{
  type: "Sample 1",
  data: [600, 400, 200, 800]
}, {
  type: "Sampel 2",
  data: [700, 300, 600, 600]
}, {
  type: "Total",
  data: [1300, 700, 800, 1400]
}];

new Chart('myChart', {
  type: "bar",
  data: {
    labels: ["A", "B", "C", "D"],
    datasets: [{
        label: data[0].type,
        xAxisID: 'x1',
        data: data[0].data,
        backgroundColor: 'rgb(54, 162, 235)',
        barPercentage: 1
      },
      {
        label: data[1].type,
        xAxisID: 'x1',
        data: data[1].data,
        backgroundColor: 'rgb(255, 159, 64)',
        barPercentage: 1
      },
      {
        label: data[2].type,
        xAxisID: 'x2',
        data: data[2].data,
        backgroundColor: 'rgb(172, 215, 250)',
        barPercentage: 1
      }
    ]
  },
  options: {
    legend: {
      labels: {
        filter: item => item.text != 'Total'
      }
    },
    scales: {
      yAxes: [{
        ticks: {
          min: 0,
          stepSize: 200
        }
      }],
      xAxes: [{
          id: 'x1'
        },
        {
          id: 'x2',
          display: false,
          offset: true
        }
      ]
    }
  }
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.min.js"></script>
<canvas id = "myChart" height = "90"></canvas>

Спасибо, Uminder. Это сработало отлично. Не могли бы вы помочь мне добавить градиент только к общей гистограмме?

Teja 04.01.2021 22:53

@Teja: Пожалуйста, взгляните на этот ответ: stackoverflow.com/a/65120239/2358409. Если вы не можете заставить его работать, опубликуйте новый вопрос для этого нового выпуска, и я или кто-то другой поможет вам решить проблему.

uminder 05.01.2021 17:14

Не могли бы вы взглянуть на вопрос, который я разместил stackoverflow.com/questions/65618298/…

Teja 07.01.2021 19:53

@uminder Здравствуйте, у меня похожий вопрос, за исключением того, что мне нужна гистограмма и линейная диаграмма. Я попробовал это решение, но оно не сработало, нужно ли что-то еще сделать в приведенном выше, чтобы оно работало с react-chartjs-2?

Vikranth 11.02.2022 05:42

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