React Recharts,chromium 和 firefox 之间的区别

React Recharts, difference between chromium and firefox

提问人:xQsme 提问时间:1/10/2023 最后编辑:xQsme 更新时间:1/11/2023 访问量:82

问:

我有一个带有时间序列的堆积面积图。我正在对数据进行归一化,使其总和始终为 100%。 对于某些特定数据,图表会中断,并且曾经在 firefox 中以相同的方式中断,直到我添加了 . 现在这就是我所拥有的:scale="time"XAxis

<AreaChart data={percentData.sort((a, b) => a.name >= b.name)}>
    <defs>
        {colors.map((c, i) => (
            <linearGradient id={`graphColor${i}`} x1="0" y1="0" x2="0" y2="1" key={c}>
                <stop offset="5%" stopColor={c} stopOpacity={1} />
                <stop offset="95%" stopColor={c} stopOpacity={0.5} />
            </linearGradient>
        ))}
        {customGradients()}
    </defs>
    <XAxis
        dataKey="name"
        type="number"
        domain={[MIN, MAX]}
        scale="time"
        tickFormatter={dateFormatter}
        ticks={tickArray}
        tickCount={5}
    >
        <Label value="Date" position="bottom" style={{ textAnchor: 'middle' }} />
    </XAxis>
    <YAxis ticks={[0, 25, 50, 75, 100]} domain={[0, 100]} unit="%" type="number">
        <Label angle={-90} value="Percentage" position="insideLeft" style={{ textAnchor: 'middle' }} />
    </YAxis>
    <Tooltip content={<CustomTooltip tickFormatter={dateFormatter} />} />
    <CartesianGrid strokeDasharray="3 3" />
    {tab
        && tab.keys
            .sort()
            .map((k, i) => (
                <Area
                    type="monotone"
                    dataKey={k}
                    stroke={tab.data[`${k}color`] || getColorForCurrentIndex(i)}
                    fillOpacity={1}
                    fill={
                        tab.data[`${k}color`]
                            ? `url(#graphColor${k}color)`
                            : `url(#graphColor${getColorIndex(i)})`
                    }
                    key={k}
                    stackId="1"
                />
            ))}
</AreaChart>

chromium 中的控制台输出以下内容:

Error: <rect> attribute x: Expected length, "NaN".
Error: <rect> attribute width: Expected length, "NaN".

我使用 unix 时间戳作为 x 坐标,它们是正确的数字实例。

这是firefox的结果:Firefox堆叠时间序列面积图

Chromium 上的第一个渲染:Chromium 堆叠时间序列面积图的第一个渲染

在 Chromium 上重新渲染后:Chromium 堆叠时间序列面积图第二次渲染

任何帮助都是值得赞赏的,正在努力解决这个问题。谢谢!

我已经尝试了 recharts 文档中提供的百分比面积图示例,结果相同。

ReactJS Google-Chrome Firefox Chromium 重新图表

评论


答:

0赞 xQsme 1/11/2023 #1

事实证明,我没有正确排序我的数据,即使它们是传递到数字轴的数字,对数据数组进行排序也解决了这个问题:

sort((a, b) => a.name >= b.name) => sort((a, b) => a.name - b.name)