【问题标题】:React Recharts data with array用数组反应 Recharts 数据
【发布时间】:2021-01-04 16:25:02
【问题描述】:

我有一个具有以下结构的数据数组:

0:
  date: '01-12-2020',
  data: Array(2)
    {name: "plants", count: 5}
    {name: "water", count: 2}
1:
  date: '02-12-2020',
  data: Array(2)
    {name: "plants", count: 1}
    {name: "water", count: 4}
...

我想在 x 轴上显示日期并为每个“名称”类别呈现一条线。在这种情况下,有两条线,一条用于植物,一条用于水。

我应该格式化这段代码还是可以直接在图表中使用这个数组?我自己在后端创建数组,所以我也可以在那里格式化它。

我尝试过类似的方法,但它不起作用:

<ResponsiveContainer width="100%" height={200}>
                <LineChart data={data}>
                    <CartesianGrid strokeDasharray="3 3" />
                    <XAxis dataKey="x" />

                    <YAxis />
                    <Tooltip />
                    {data.map((item, i) => (
                        <Line
                            dataKey={data[0].data[0].count}
                            type="monotone"
                            stroke={colors[0]}
                            activeDot={{ r: 8 }}
                        />
                    ))}
                </LineChart>
            </ResponsiveContainer>

【问题讨论】:

    标签: reactjs recharts


    【解决方案1】:

    您的数据需要格式化为:

    [{名称:'01-12-2020', 植物:5 水:4}]

    你可以这样做:

       let result = [];
       data.map(entry) => {
       let obj = {date: entry.date}
         entry.data.map((entry1) => {
          obj[entry1.name] = entry1.count;
        });
       result.push(obj)
      })

    你的图表如下(你在 XAxis 上的 dataKey 是假的)

    <ChartContainer>
      <ResponsiveContainer>
        <LineChart
          width={500}
          height={300}
          style={{ color: scoopBlue }}
          data={data}
          margin={{
            top: 5,
            right: 30,
            left: 20,
            bottom: 5
          }}
        >
          <CartesianGrid strokeDasharray="3 3" />
          <Legend />
          <Line
            type="monotone"
            dataKey="plants"
            stroke={scoopBlue}
            strokeWidth={2}
            activeDot={{ r: 5 }}
          />
            <Line
            type="monotone"
            dataKey="water"
            stroke={"orange"}
            strokeWidth={2}
            activeDot={{ r: 5 }}
           />
         </LineChart>
       </ResponsiveContainer>
    </ChartContainer>
    

    【讨论】:

    • 我不明白您是如何在 LineChart 上使用新的 result 数组的。 item.name 不是属性时从哪里来?你能澄清一下吗?
    • 我更正了我的帖子
    猜你喜欢
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 2019-03-27
    • 2017-06-24
    • 2015-08-05
    • 1970-01-01
    相关资源
    最近更新 更多