微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Recharts 条形图垂直、堆叠中的条形之间添加间隙

如何解决如何在 Recharts 条形图垂直、堆叠中的条形之间添加间隙

我正在尝试设置 Recharts 以显示垂直堆叠条形图,条形之间有一些间隙,但我无法设置任何间隙。

这就是我的代码的样子。

<ResponsiveContainer height={23} width={'100%'}>
  <BarChart
    data={data}
    layout={'vertical'}
    barGap={10}
    margin={{ top: 0,right: 0,bottom: 0,left: 0 }}
  >
    <XAxis type={'number'} hide domain={['dataMin','dataMax']} />
    <YAxis
      dataKey='axis'
      type={'category'}
      axisLine={false}
      tickLine={false}
      hide
    />
    {keys.map((key: string,index: number) => (
      <Bar key={key} stackId={'stack'} dataKey={key} fill={colors[key]} />
    ))}
  </BarChart>
</ResponsiveContainer>;

解决方法

要在条形之间添加间隙,您可以添加另一个 Bar 组件,该组件具有固定值,fill 带有透明颜色,以便您可以在条形之间产生间隙的错觉堆叠条中的两个条。

然而,要获得间隙值,您需要事先更新 data 数组,将 gap 值添加为其固定值(例如设置为 100)。

使用此解决方法,解决方案可能如下所示:

这是图像的相关代码:

import React,{ PureComponent } from 'react';
import { BarChart,Bar,XAxis,YAxis,CartesianGrid } from 'recharts';

const data = [
  /* Add the gap key to each data line; could also be done in a forloop */
  { name: 'Page A',uv: 4000,pv: 2400,amt: 2400,gap: 100 },{ name: 'Page B',uv: 3000,pv: 1398,amt: 2210,{ name: 'Page C',uv: 2000,pv: 9800,amt: 2290,{ name: 'Page D',uv: 2780,pv: 3908,amt: 2000,{ name: 'Page E',uv: 1890,pv: 4800,amt: 2181,{ name: 'Page F',uv: 2390,pv: 3800,amt: 2500,{ name: 'Page G',uv: 3490,pv: 4300,amt: 2100,];

const keys = ['uv','pv'];
const colors = ['#8884d8','#82ca9d'];

export default class Example extends PureComponent {
  render() {
    return (
      <BarChart
        width={500}
        height={300}
        data={data}
        margin={{ top: 20,right: 30,left: 20,bottom: 5 }}
        layout='vertical'
      >
        <CartesianGrid strokeDasharray="3 3" />
        <XAxis type='number' />
        <YAxis type='category' dataKey='name' />
        {keys.map((key: string,index: number): any => {
          const bars = [];
          bars.push(<Bar dataKey={key} stackId="a" fill={colors[index]} />);
          /* Add a bar just for the gap after each bar */
          bars.push(<Bar dataKey='gap' stackId="a" fill='transparent' />);
          return bars;
        })}
      </BarChart>
    );
  }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。