recharts - Recharts 自定义 X 轴
问题描述
有谁知道在图表中是否可能出现以下带有周轴的情况?
例如,有一个天图。X 轴上大约有连续 20 天。您需要在下方添加一个额外的 X 轴来提及周 #,但周应浮动在其相关日期范围的中间,如下所示:
Mon Tue Wed Thr Fri Sat Sun Mon Tue Wed Thr Fri Sat Sun Mon Tue Wed Thr Fri Sat
Week 1 Week 2 Week 3
编辑:我认为这是可能的,如果我们为轴创建一个自定义函数并添加几个条件,以便将星期# 的位置精确地放在某个区域之下。
感谢您的评论和研究!我的要求已经改变,所以我没有进一步讨论这个问题。
解决方案
您的图表上绝对有可能有许多 XAxis。为此,您需要在<XAxis />
图表中添加一条线,并将其设置xAxisId
为唯一值,以便图表可以区分不同的 XAxis。(注意:所有 XAxis 都需要不同的 xAxisId;其默认值设置为0
,您需要覆盖此默认值)。
然后,要获得没有任何重复的通用 XAxis 数据,您需要将allowDuplicatedCategory
XAxis 上的道具设置为false
. 但是,第一个和最后一个刻度不会居中。我会看看我是否能找到解决方案。
使用您给定的数据示例,结果图可能如下所示:
import React from "react";
import {
LineChart,
Line,
XAxis,
YAxis,
CartesianGrid,
Tooltip,
Legend
} from "recharts";
const data = [
{ name: "Mon", uv: 4000, pv: 2400, amt: 2400, week: "Week 1" },
{ name: "Tue", uv: 3000, pv: 1398, amt: 2210, week: "Week 1" },
{ name: "Wed", uv: 2000, pv: 9800, amt: 2290, week: "Week 1" },
{ name: "Thu", uv: 2780, pv: 3908, amt: 2000, week: "Week 1" },
{ name: "Fri", uv: 1890, pv: 4800, amt: 2181, week: "Week 1" },
{ name: "Sat", uv: 2390, pv: 3800, amt: 2500, week: "Week 1" },
{ name: "Sun", uv: 3490, pv: 4300, amt: 2100, week: "Week 1" },
...
];
const SimpleLineChart = () => {
return (
<LineChart
width={1200}
height={300}
data={data}
margin={{ top: 5, right: 30, left: 20, bottom: 5 }}
>
<XAxis xAxisId="0" dataKey="name" />
<XAxis xAxisId="1" dataKey="week" allowDuplicatedCategory={false} />
<YAxis />
<CartesianGrid strokeDasharray="3 3" />
<Tooltip />
<Legend />
<Line
type="monotone"
dataKey="pv"
stroke="#8884d8"
activeDot={{ r: 8 }}
/>
<Line type="monotone" dataKey="uv" stroke="#82ca9d" />
</LineChart>
);
};
export default SimpleLineChart;
推荐阅读
- java - 将汽车绘制为多边形并使其在 Java Swing 中移动
- xaml - 如何更改工具栏颜色?(xamarin.forms)
- windows - 在 windows cmd 中为 conf 文件指定环境变量
- spring-boot - SpringBoot Config Server 文件分隔符问题
- c++ - 指针减去数组和变量中的指针
- php - 如何根据 json id 查询 Eloquent 关系表
- javascript - 在Vue中的方法内部调用方法
- agora.io - 如何在 agora.io 踢用户?
- python - 当行数据分为两个单独的页面时,如何正确地从pdf中提取表格数据?
- c - 标签页的文本没有正确显示 unicode 字符串