Пополняет — Всплывающая подсказка для каждого столбца на столбчатой диаграмме, состоящей из трех столбцов

#recharts

#пополнение

Вопрос:

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

 import React from 'react';
import {
  BarChart,
  Bar,
  XAxis,
  YAxis,
  CartesianGrid,
  Tooltip,
  Legend,
} from 'Recharts';

const data = [
  { name: 'Page A', uv: 4000, pv: 1982, amt: 2400 },
  { name: 'Page B', uv: 3000, pv: 1398, amt: 4739 },
  { name: 'Page C', uv: 2000, pv: 9800, amt: 9056 },
  { name: 'Page D', uv: 2780, pv: 3908, amt: 2000 },
  { name: 'Page E', uv: 1890, pv: 4678, amt: 2181 },
  { name: 'Page F', uv: 2390, pv: 3800, amt: 2873 },
  { name: 'Page G', uv: 3490, pv: 1987, amt: 2100 },
];

class SimpleBarChart extends React.Component {
  render() {
    return (
      <BarChart
        width={600}
        height={300}
        data={data}
        margin={{ top: 5, right: 30, left: 20, bottom: 5 }}
      >
        <CartesianGrid strokeDasharray="3 3" />
        <XAxis dataKey="name" />
        <YAxis />
        <Tooltip />
        <Legend />
        <Bar dataKey="pv" barSize={20} fill="#8884d8" />
        <Bar dataKey="amt" barSize={20} fill="#82ca9d" />
        <Bar dataKey="uv" barSize={20} fill="#ffc658" />
      </BarChart>
    );
  }
}

export default SimpleBarChart;
  

Ответ №1:

Следуя ответу Наташи, сначала создайте пользовательскую всплывающую подсказку:

 <Tooltip content={<CustomTooltip/>} />
  

Добавьте функцию / компонент для отображения пользовательского содержимого. Переменная tooltip используется для определения, над каким баром выполняется наведение курсора мыши. Содержимое можно настроить с помощью payload , которое содержит все столбцы в выделении.

 var tooltip
const CustomTooltip = ({ active, payload }) => {
    if (!active || !tooltip)    return null
    for (const bar of payload)
        if (bar.dataKey === tooltip)
            return <div>{ bar.name }<br/>{ bar.value.toFixed(2) }</div>
    return null
}
  

Наконец, добавьте name и onMouseOver реквизиты к каждому <Bar> элементу:

 <Bar dataKey="pv" barSize={20} fill="#8884d8"
     name="Name" onMouseOver={ () => tooltip="pv" } />
  

При наведении курсора мыши на это <Bar> переменной tooltip присваивается значение «pv». Затем CustomTooltip найдет эту запись в payload параметре и отобразит имя и значение.

Ответ №2:

Вы можете создать пользовательскую всплывающую подсказку, как в приведенном здесь примере:

http://recharts.org/en-US/examples/CustomContentOfTooltip <—- Пример настраиваемой всплывающей подсказки (из документации по перезарядке)

После создания настраиваемой всплывающей подсказки вы можете вызвать ее в свойстве OnMouseOver компонента Bar, которое приведено в документации здесь:

http://recharts.org/en-US/api/Bar#onMouseOver <—- При наведении мыши

Вы также могли бы использовать OnMouseEnter и onMouseLeave, но я знаю, что это работает не для всех.

Возможно, вы захотите создать функцию, которая показывает всплывающую подсказку при наведении курсора мыши на столбец и скрывает всплывающую подсказку, когда курсор мыши перестает наведен на столбец.

Ответ №3:

Вы можете добавить во всплывающую подсказку реквизит shared={false} следующим образом:

 <Tooltip shared={false} />