在图表的 X 轴上仅显示年份的 2 位数字

如何解决在图表的 X 轴上仅显示年份的 2 位数字

在我的包含日期字符串的数据图表中,X 轴看起来很混乱。

enter image description here

是否可以将 Recharts 配置为仅使用年份的最后 2 位数字来标记轴?例如,var firebaseConfig = { apiKey: "xxxx",authDomain: "xxxx",projectId: "xxxx",storageBucket: "xxxx",messagingSenderId: "xxxxx",appId: "xxxx",measurementId: "xxxx" }; // Initialize Firebase firebase.initializeApp(firebaseConfig); firebase.analytics().logEvent('admin',{ name: 'homepage'}); 171819 无需重复每年的标签

20

附加问题:使用 Bas van der Linden 的方法生成的图表非常接近我们所需要的!但数据点未沿 X 轴正确定位。

如果我们使用下面的 import { ResponsiveContainer,LineChart,Line,Cartesiangrid,XAxis,YAxis,Tooltip } from 'recharts'; export function Chart() { const d = [ {date: '2017-02-01',price: 231},{date: '2017-04-01',price: 453},{date: '2017-16-01',price: 123},{date: '2018-01-01',price: 234},{date: '2018-04-01',price: 958},{date: '2018-11-01',price: 163},{date: '2019-03-01',price: 293},{date: '2019-10-01',price: 471},{date: '2020-07-01',price: 881},{date: '2020-09-01',price: 122},] return ( <ResponsiveContainer width="100%" height={400}> <LineChart data={d}> <Line type="monotone" dataKey="price" stroke="#8884d8" /> <Cartesiangrid stroke="#ccc" strokeDasharray="5 5" /> <XAxis dataKey="date" /> <YAxis dataKey="price" /> <Tooltip /> </LineChart> </ResponsiveContainer> ) } 数组,这会变得更加明显。在生成的图表中,您可以看到 2018 年的数据点在 X 轴上占据的空间比 2017、2019 和 2020 年的数据点加起来要多得多。如果刻度标签 d17间的间距与刻度标签 1818间的间距长度相似会更好。

enter image description here

19

解决方法

你可以这样做:

export function Chart() {
  const [data,setData] = useState([]);
  const d = [
    { date: "2017-02-01",price: 231 },{ date: "2017-04-01",price: 453 },{ date: "2017-16-01",price: 123 },{ date: "2018-01-01",price: 234 },{ date: "2018-04-01",price: 958 },{ date: "2018-11-01",price: 163 },{ date: "2019-03-01",price: 293 },{ date: "2019-10-01",price: 471 },{ date: "2020-07-01",price: 881 },{ date: "2020-09-01",price: 122 },];

  useEffect(() => {
    const datesAlreadyListed = [];
    for (let i = 0; i < d.length; i++) {
      const year = d[i].date.split("-")[0].substring(2,4);
      if (!datesAlreadyListed.includes(year)) {
        datesAlreadyListed.push(year);
        d[i].year = year;
      }
    }
    setData(d);
  },[]);

  return (
    <ResponsiveContainer width="100%" height={400}>
      <LineChart data={data}>
        <Line type="monotone" dataKey="price" stroke="#8884d8" />
        <CartesianGrid stroke="#ccc" strokeDasharray="5 5" />
        <XAxis dataKey="year" />
        <YAxis dataKey="price" />
        <Tooltip />
      </LineChart>
    </ResponsiveContainer>
  );
}

所以上面的方法是在 year 钩子内向 d 添加一个 useEffect 属性。 year 属性的值取决于循环遍历 d 时是否已遇到日期。

如果之前没有看到年份值,请将 year 属性设置为此值,以便它显示在 y 轴上。


Example Sandbox

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

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?