reactjs - 如何在 recharts 中使用 .map 函数创建双轴线图

标签 reactjs linechart recharts

所以基本上我有这些数据:

const bodyWeightAndFatData = [
    {
      name: 'salim',
      style:'#57c0e8',
      category:'Body Weight',
      data: [
        { day: 23, value: 100 },
        { day: 24, value: 101 },
        { day: 25, value: 104 },
        { day: 26, value: 107 },
        { day: 27, value: 108 },
        { day: 28, value: 105 },
        { day: 29, value: 106 },
        { day: 30, value: 107 },
        { day: 31, value: 107 },
      ],
    },
    {
      name: 'salim',
      style:'pink',
      category:'Fat Percentage',
      data: [
        { day: 23, value: 134 },
        { day: 24, value: 135 },
        { day: 25, value: 131 },
        { day: 26, value: 133 },
        { day: 27, value: 137 },
        { day: 28, value: 131 },
        { day: 29, value: 130 },
        { day: 30, value: 139 },
        { day: 31, value: 138 },
      ],
    },

  ];

来自一个组件。我正在从这样的另一个组件中绘制图表:

<div className={styles.outer}>
      <div className={styles.inner}>
      <p className={styles.title}>Average Measurments</p>
        <ResponsiveContainer width="95%" height={300}>
        <LineChart >
        <CartesianGrid strokeDasharray="5 0" vertical={false} tickSize={10} padding={{ left: 20 }}/>
        <XAxis yAxisId="right" tickLine={false} axisLine={false} dataKey="day" allowDuplicatedCategory={false} />
        <YAxis tickCount={5} axisLine={false} dx={-15} dataKey="value"/>
        <Tooltip/>
        <Legend
        layout="horizontal" verticalAlign="top" align="center" 
        payload={
          props.data.map(
            item => ({
              type: "circle",
              id: item.name,
              color: item.style,
              value: `${item.category}`
            })
          )
        }/>
        {props.data.map(s => (
          <Line dataKey="value" data={s.data} name={s.name} key={s.category} stroke={s.style}/>
        ))}
      </LineChart>
      </ResponsiveContainer>
      </div>
      </div>

结果在绘制数据和所有内容时效果很好,但我坚持的是我需要显示两个 Y 轴,而不是只显示一个 Y 轴。我已经查过了,但我不知道如何使用 .map 创建它,任何人都可以帮忙吗?

最佳答案

我是这样做的。

 const bodyWeightAndFatData = [
  {
    name: 'salim',
    style:'#57c0e8',
    category:'Body Weight',
    data: [
      { day: 23, value: 100 },
      { day: 24, value: 101 },
      { day: 25, value: 104 },
      { day: 26, value: 107 },
      { day: 27, value: 108 },
      { day: 28, value: 105 },
      { day: 29, value: 106 },
      { day: 30, value: 107 },
      { day: 31, value: 107 },
    ],
  },
  {
    name: 'salim',
    style:'pink',
    category:'Fat Percentage',
    data: [
      { day: 23, value: 134 },
      { day: 24, value: 135 },
      { day: 25, value: 131 },
      { day: 26, value: 133 },
      { day: 27, value: 137 },
      { day: 28, value: 131 },
      { day: 29, value: 130 },
      { day: 30, value: 139 },
      { day: 31, value: 138 },
    ],
  },

];



export default function App() {
  return (

    <div >
    <div >
    <p>Average Measurments</p>
      <ResponsiveContainer width="95%" height={300}>
      <LineChart >
      <CartesianGrid strokeDasharray="5 0" vertical={false} tickSize={10} padding={{ left: 20 }}/>
      <XAxis   tickLine={false} axisLine={true} dataKey="day" allowDuplicatedCategory={false} />
      <YAxis  yAxisId="left" tickCount={5}  dx={-15} dataKey="value"/>
      <YAxis  yAxisId="right" orientation="right" tickCount={5} dx={-15} dataKey="value"/>
      <Tooltip/>
      <Legend
      layout="horizontal" verticalAlign="top" align="center" 
      payload={
        bodyWeightAndFatData.map(
          item => ({
            type: "circle",
            id: item.name,
            color: item.style,
            value: `${item.category}`
          })
        )
      }/>
      {bodyWeightAndFatData.map(s => (
        <Line  yAxisId="left" dataKey="value" data={s.data} name={s.name} key={s.category} stroke={s.style}/>
      ))}
            {bodyWeightAndFatData.map(s => (
        <Line  yAxisId="right" dataKey="value" data={s.data} name={s.name} key={s.category} stroke={s.style}/>
      ))}
    </LineChart>
    </ResponsiveContainer>
    </div>
    </div>
  );
}

双轴一左一右。

关于reactjs - 如何在 recharts 中使用 .map 函数创建双轴线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62340619/

相关文章:

d3.js - 需要帮助绘制多元线之间的区域 - 而不是从轴到线

javascript - Recharts - 归一化堆叠条形图

node.js - var express = require ('express' ) - 无法读取未定义的属性 'prototype'

reactjs - nextjs 路由器更新 URL 参数更改

d3.js - 使用 dc 或 d3.js 中具有正负 y 轴的面积图制作图表

javascript - 仅针对某些数据点重新绘制 LineChart 点

reactjs - Recharts - 将值数组传递给 Line 组件

javascript - Browserify 和 ReactJS 问题

javascript - 如何在 TypeScript React 中向 onChange 和 onClick 函数添加类型

python - 使用 matplotlib 为 svg 线图创建工具提示